{ "cells": [ { "cell_type": "markdown", "id": "6d27b499-55a1-4050-8c69-826a130707bd", "metadata": {}, "source": [ "# Demo - Using `alchemiscale` to evaluate a relative binding free energy network" ] }, { "cell_type": "markdown", "id": "e3ea5f9b-97ee-4bc2-bfd7-c5cde5e0420c", "metadata": {}, "source": [ "This notebook details the process of running a relative binding free energy calculation using the [openfe](https://github.com/OpenFreeEnergy/openfe/) toolkit and the execution platform [alchemiscale](https://github.com/openforcefield/alchemiscale).\n", "\n", "The notebook is broken down into the following section:\n", " 1. Creating an `AlchemicalNetwork`\n", " 2. Submitting an `Alchemicalnetwork` to `alchemiscale`\n", " 3. Monitoring the progress of an `alchemiscale` submission\n", " 4. Gathering results and analyzing them using `cinnabar`\n", "\n", "Credits:\n", "- Irfan Alibay ([@ialibay](https://github.com/IAlibay)) for initial structure and content\n", "- David Dotson ([@dotsdl](https://github.com/dotsdl)) for expansion and editing for use as a tutorial" ] }, { "cell_type": "markdown", "id": "177075c1-0bf3-4f59-88fd-2b2122b34555", "metadata": {}, "source": [ "## Creating an `AlchemicalNetwork` for the `tyk2` benchmark system" ] }, { "cell_type": "markdown", "id": "8d1d6468-70a5-4d0b-b4bf-8d7093b6be9a", "metadata": {}, "source": [ "We first illustrate how to build `AlchemicalNetwork` objects,\n", "from a starting point of chemical models stored in sdf and pdb files.\n", "\n", "An `AlchemicalNetwork` is used to represent an entire network of calculations,\n", "and is composed of many smaller objects:\n", "\n", "- An `AlchemicalNetwork` composed of \n", " - each node a `ChemicalSystem`\n", " - each containing many components, such as `SmallMoleculeComponent`, `ProteinComponent`\n", " - internally each Component usually wraps an RDKit representation\n", " - each directed edge a `Transformation`, containing\n", " - two `ChemicalSystem`s, the 'A' and 'B' side\n", " - zero or more `Mapping` objects relating these two sides\n", " - a `Protocol` defining the computational method to be applied to other items" ] }, { "cell_type": "code", "execution_count": 1, "id": "6bb3f4a4-2135-494a-8365-9ef229dd124d", "metadata": {}, "outputs": [], "source": [ "import openfe\n", "import gufe\n", "from openff.units import unit\n", "from rdkit import Chem" ] }, { "cell_type": "code", "execution_count": 2, "id": "7d1fca4b-9750-4dcf-816a-b5a0782003af", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "gufe version: 1.0.0\n", "openfe version: 1.0.1+0.g48dcbb26.dirty\n" ] } ], "source": [ "print(\"gufe version: \", gufe.__version__)\n", "print(\"openfe version: \", openfe.__version__)" ] }, { "cell_type": "code", "execution_count": 3, "id": "4517e70f-ed72-46c8-946a-00cac4207882", "metadata": {}, "outputs": [], "source": [ "import logging\n", "logger = logging.getLogger()\n", "logger.setLevel(logging.WARN)" ] }, { "cell_type": "markdown", "id": "7002df79-73c6-46ca-93dc-a0fe3c0389a5", "metadata": {}, "source": [ "### Define `ChemicalSystem`s for network nodes\n", "\n", "We'll start by defining the nodes for our network.\n", "A `ChemicalSystem` is made of one or more `Component`s. These can be one of `ProteinComponent`, `SmallMoleculeComponent`, or `SolventComponent`, and potentially others as needed. This design allows for memory efficient representation of large networks with perhaps hundreds or thousands of nodes, but perhaps far fewer variants in proteins, ligands, etc." ] }, { "cell_type": "markdown", "id": "cc900044-72f6-4463-9589-afda3a153c14", "metadata": {}, "source": [ "#### Reading Ligands\n", "\n", "The ligands are concatenated in a single sdf file, we'll read these using RDKit.\n", "\n", "Each of the ligands have been pre-docked into the protein and aligned to their common scaffold. It is important to recognize that any processing required to prepare ligand and protein structures for alchemical free energy calculations should be done *before* the steps we are taking here." ] }, { "cell_type": "code", "execution_count": 4, "id": "16527065", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[SmallMoleculeComponent(name=lig_ejm_54),\n", " SmallMoleculeComponent(name=lig_jmc_23),\n", " SmallMoleculeComponent(name=lig_ejm_47),\n", " SmallMoleculeComponent(name=lig_jmc_27),\n", " SmallMoleculeComponent(name=lig_ejm_46),\n", " SmallMoleculeComponent(name=lig_ejm_31),\n", " SmallMoleculeComponent(name=lig_ejm_42),\n", " SmallMoleculeComponent(name=lig_ejm_50),\n", " SmallMoleculeComponent(name=lig_ejm_45),\n", " SmallMoleculeComponent(name=lig_jmc_28),\n", " SmallMoleculeComponent(name=lig_ejm_55),\n", " SmallMoleculeComponent(name=lig_ejm_43),\n", " SmallMoleculeComponent(name=lig_ejm_48)]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ligands = [\n", " openfe.SmallMoleculeComponent(m) for m in Chem.SDMolSupplier('ligands.sdf', removeHs=False)\n", "]\n", "ligands" ] }, { "cell_type": "code", "execution_count": 5, "id": "16e4b2b9-14ab-4d07-8ec7-2926f41c9426", "metadata": {}, "outputs": [], "source": [ "# The OpenFE RBFE protocol does not yet support charge changes (to be changed very soon!)\n", "# Here we raise an error if a change in formal charge is identified\n", "base_formalcharge = Chem.rdmolops.GetFormalCharge(ligands[0].to_rdkit())\n", "\n", "for mol in ligands[1:]:\n", " if Chem.rdmolops.GetFormalCharge(mol.to_rdkit()) != base_formalcharge:\n", " errmsg = f\"The molecule {mol} has a different formal charge than the first ligand molecule\"\n", " raise ValueError(errmsg)" ] }, { "cell_type": "markdown", "id": "4307a828-2e40-43d6-b148-23f2b83b0586", "metadata": {}, "source": [ "#### Reading the protein\n", "\n", "The protein is supplied as a PDB file, readable via the `ProteinComponent.from_pdb_file` class method." ] }, { "cell_type": "code", "execution_count": 6, "id": "a31c89a4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "ProteinComponent(name=tyk2)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "protein = openfe.ProteinComponent.from_pdb_file('protein.pdb', name='tyk2')\n", "protein" ] }, { "cell_type": "markdown", "id": "78639c38-e866-4186-b932-d48f63099ad4", "metadata": {}, "source": [ "#### Defining the solvent\n", "\n", "We'll also need at least one `SolventComponent` to encode our choice of solvent and counterions, with concentration.\n", "The concentration is defined as having units supplied by `openff.units`, this package is used to avoid confusion.\n", "\n", "\n", "The `SolventComponent` doesn't actually perform any actual solvation (packing water molecules, ions); that is performed just before simulation time during `Protocol` execution." ] }, { "cell_type": "code", "execution_count": 7, "id": "3c47166d-143b-41f0-9dce-7805e56d7191", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SolventComponent(name=O, Na+, Cl-)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solvent = openfe.SolventComponent(positive_ion='Na', \n", " negative_ion='Cl',\n", " neutralize=True, \n", " ion_concentration=0.15*unit.molar)\n", "solvent" ] }, { "cell_type": "markdown", "id": "00827c9e-50aa-4d3d-90d0-4f510e3de247", "metadata": {}, "source": [ "#### Build the `ChemicalSystem`s\n", "\n", "We can now construct the `ChemicalSystem`s we want represented in our network. Since we are planning to perform relative binding free energy (RBFE) calculations, we'll define both *complex* and *solvent* variants for each ligand.\n", "\n", "This produces a dictionary mapping the ligand name to the `ChemicalSystem` that contains that ligand.\n", "There are two dictionaries, for complexed and solvated ligands respectively." ] }, { "cell_type": "code", "execution_count": 8, "id": "10edc8b3-5f45-4e37-b1d5-bd508601e352", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'lig_ejm_54': ChemicalSystem(name=lig_ejm_54_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_54), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_jmc_23': ChemicalSystem(name=lig_jmc_23_complex, components={'ligand': SmallMoleculeComponent(name=lig_jmc_23), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_47': ChemicalSystem(name=lig_ejm_47_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_47), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_jmc_27': ChemicalSystem(name=lig_jmc_27_complex, components={'ligand': SmallMoleculeComponent(name=lig_jmc_27), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_46': ChemicalSystem(name=lig_ejm_46_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_46), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_31': ChemicalSystem(name=lig_ejm_31_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_31), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_42': ChemicalSystem(name=lig_ejm_42_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_42), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_50': ChemicalSystem(name=lig_ejm_50_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_50), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_45': ChemicalSystem(name=lig_ejm_45_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_45), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_jmc_28': ChemicalSystem(name=lig_jmc_28_complex, components={'ligand': SmallMoleculeComponent(name=lig_jmc_28), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_55': ChemicalSystem(name=lig_ejm_55_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_55), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_43': ChemicalSystem(name=lig_ejm_43_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_43), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)}),\n", " 'lig_ejm_48': ChemicalSystem(name=lig_ejm_48_complex, components={'ligand': SmallMoleculeComponent(name=lig_ejm_48), 'solvent': SolventComponent(name=O, Na+, Cl-), 'protein': ProteinComponent(name=tyk2)})}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "complexed = {l.name: openfe.ChemicalSystem(components={'ligand': l,\n", " 'solvent': solvent, \n", " 'protein': protein}, \n", " name=f\"{l.name}_complex\") \n", " for l in ligands}\n", "complexed" ] }, { "cell_type": "code", "execution_count": 9, "id": "c8a0b60d-bfae-4f99-9f4d-656c982433b9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'lig_ejm_54': ChemicalSystem(name=lig_ejm_54_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_54), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_jmc_23': ChemicalSystem(name=lig_jmc_23_solvent, components={'ligand': SmallMoleculeComponent(name=lig_jmc_23), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_47': ChemicalSystem(name=lig_ejm_47_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_47), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_jmc_27': ChemicalSystem(name=lig_jmc_27_solvent, components={'ligand': SmallMoleculeComponent(name=lig_jmc_27), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_46': ChemicalSystem(name=lig_ejm_46_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_46), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_31': ChemicalSystem(name=lig_ejm_31_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_31), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_42': ChemicalSystem(name=lig_ejm_42_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_42), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_50': ChemicalSystem(name=lig_ejm_50_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_50), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_45': ChemicalSystem(name=lig_ejm_45_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_45), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_jmc_28': ChemicalSystem(name=lig_jmc_28_solvent, components={'ligand': SmallMoleculeComponent(name=lig_jmc_28), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_55': ChemicalSystem(name=lig_ejm_55_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_55), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_43': ChemicalSystem(name=lig_ejm_43_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_43), 'solvent': SolventComponent(name=O, Na+, Cl-)}),\n", " 'lig_ejm_48': ChemicalSystem(name=lig_ejm_48_solvent, components={'ligand': SmallMoleculeComponent(name=lig_ejm_48), 'solvent': SolventComponent(name=O, Na+, Cl-)})}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solvated = {l.name: openfe.ChemicalSystem(components={'ligand': l, \n", " 'solvent': solvent}, \n", " name=f\"{l.name}_solvent\") \n", " for l in ligands}\n", "solvated" ] }, { "cell_type": "markdown", "id": "80dd8261-d431-43dd-9439-20c59abce39b", "metadata": {}, "source": [ "### Define `Transformation`s between `ChemicalSystem`s as network edges" ] }, { "cell_type": "markdown", "id": "b7cabcfe-66c4-48cc-9dfe-e1ec6fb4daa8", "metadata": {}, "source": [ "A `Transformation` is a directed edge between two `ChemicalSystem`s. It includes a `Protocol` parameterized with `Settings`, and optionally a `ComponentMapping`. \n", "\n", "The `Protocol` defines the actual computational method used to evaluate the `Transformation` to yield estimates for the free energy difference between the `ChemicalSystem`s.\n", "\n", "The `ComponentMapping` defines the atom mapping(s) between corresponding `Component`s in the two `ChemicalSystem`s. This is often critical for relative binding free energy calculations, since the choice of mapping can heavily influence convergence of the resulting estimates." ] }, { "cell_type": "markdown", "id": "fae8b80e-1b77-4d64-a967-10f75326647c", "metadata": {}, "source": [ "#### Define the `Protocol` used for `Transformation` evaluation" ] }, { "cell_type": "markdown", "id": "2101fea6-3fda-4a73-81a0-cea41bb30dc0", "metadata": {}, "source": [ "For this example, we'll use the same `Protocol` for all our `Transformation`s, with identical `Settings` for each." ] }, { "cell_type": "code", "execution_count": 10, "id": "183b23a6-1839-4586-bbbe-60b2defd2f01", "metadata": {}, "outputs": [], "source": [ "from openfe.protocols.openmm_rfe import RelativeHybridTopologyProtocol" ] }, { "cell_type": "markdown", "id": "fb216611-780c-447b-b9d6-b628ba9ea619", "metadata": {}, "source": [ "Any given `Protocol` has a `default_settings()` method, which can be used to get the default settings that are specific to that `Protocol`:" ] }, { "cell_type": "code", "execution_count": 11, "id": "d7bac455-ddc1-4735-96d7-5c6681ab3cbc", "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'forcefield_settings': {'constraints': 'hbonds',\n", " 'rigid_water': True,\n", " 'hydrogen_mass': 3.0,\n", " 'forcefields': ['amber/ff14SB.xml',\n", " 'amber/tip3p_standard.xml',\n", " 'amber/tip3p_HFE_multivalent.xml',\n", " 'amber/phosaa10.xml'],\n", " 'small_molecule_forcefield': 'openff-2.1.1',\n", " 'nonbonded_cutoff': 1.0 ,\n", " 'nonbonded_method': 'PME'},\n", " 'thermo_settings': {'temperature': 298.15 ,\n", " 'pressure': 0.9869232667160129 ,\n", " 'ph': None,\n", " 'redox_potential': None},\n", " 'protocol_repeats': 3,\n", " 'solvation_settings': {'solvent_model': 'tip3p',\n", " 'solvent_padding': 1.2 },\n", " 'partial_charge_settings': {'partial_charge_method': 'am1bcc',\n", " 'off_toolkit_backend': 'ambertools',\n", " 'number_of_conformers': None,\n", " 'nagl_model': None},\n", " 'lambda_settings': {'lambda_functions': 'default', 'lambda_windows': 11},\n", " 'alchemical_settings': {'softcore_LJ': 'gapsys',\n", " 'explicit_charge_correction_cutoff': 0.8 ,\n", " 'endstate_dispersion_correction': False,\n", " 'use_dispersion_correction': False,\n", " 'softcore_alpha': 0.85,\n", " 'turn_off_core_unique_exceptions': False,\n", " 'explicit_charge_correction': False},\n", " 'simulation_settings': {'equilibration_length': 1.0 ,\n", " 'production_length': 5.0 ,\n", " 'minimization_steps': 5000,\n", " 'time_per_iteration': 1 ,\n", " 'real_time_analysis_interval': 250 ,\n", " 'early_termination_target_error': 0.0 ,\n", " 'real_time_analysis_minimum_time': 500 ,\n", " 'sampler_method': 'repex',\n", " 'sams_flatness_criteria': 'logZ-flatness',\n", " 'sams_gamma0': 1.0,\n", " 'n_replicas': 11},\n", " 'engine_settings': {'compute_platform': None},\n", " 'integrator_settings': {'timestep': 4 ,\n", " 'langevin_collision_rate': 1.0 ,\n", " 'barostat_frequency': 25 ,\n", " 'remove_com': False,\n", " 'reassign_velocities': False,\n", " 'n_restart_attempts': 20,\n", " 'constraint_tolerance': 1e-06},\n", " 'output_settings': {'checkpoint_interval': 250 ,\n", " 'forcefield_cache': 'db.json',\n", " 'output_indices': 'not water',\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'output_filename': 'simulation.nc',\n", " 'output_structure': 'hybrid_system.pdb'}}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "protocol_settings = RelativeHybridTopologyProtocol.default_settings()\n", "protocol_settings.dict()" ] }, { "cell_type": "code", "execution_count": 18, "id": "54d04e3c-7602-4b70-8b34-8a47ec5abb29", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'alchemical_settings': {'endstate_dispersion_correction': False,\n", " 'explicit_charge_correction': False,\n", " 'explicit_charge_correction_cutoff': ,\n", " 'softcore_LJ': 'gapsys',\n", " 'softcore_alpha': 0.85,\n", " 'turn_off_core_unique_exceptions': False,\n", " 'use_dispersion_correction': False},\n", " 'engine_settings': {'compute_platform': None},\n", " 'forcefield_settings': {'constraints': 'hbonds',\n", " 'forcefields': ['amber/ff14SB.xml',\n", " 'amber/tip3p_standard.xml',\n", " 'amber/tip3p_HFE_multivalent.xml',\n", " 'amber/phosaa10.xml'],\n", " 'hydrogen_mass': 3.0,\n", " 'nonbonded_cutoff': ,\n", " 'nonbonded_method': 'PME',\n", " 'rigid_water': True,\n", " 'small_molecule_forcefield': 'openff-2.1.1'},\n", " 'integrator_settings': {'barostat_frequency': ,\n", " 'constraint_tolerance': 1e-06,\n", " 'langevin_collision_rate': ,\n", " 'n_restart_attempts': 20,\n", " 'reassign_velocities': False,\n", " 'remove_com': False,\n", " 'timestep': },\n", " 'lambda_settings': {'lambda_functions': 'default', 'lambda_windows': 11},\n", " 'output_settings': {'checkpoint_interval': ,\n", " 'checkpoint_storage_filename': 'checkpoint.chk',\n", " 'forcefield_cache': 'db.json',\n", " 'output_filename': 'simulation.nc',\n", " 'output_indices': 'not water',\n", " 'output_structure': 'hybrid_system.pdb'},\n", " 'partial_charge_settings': {'nagl_model': None,\n", " 'number_of_conformers': None,\n", " 'off_toolkit_backend': 'ambertools',\n", " 'partial_charge_method': 'am1bcc'},\n", " 'protocol_repeats': 3,\n", " 'simulation_settings': {'early_termination_target_error': ,\n", " 'equilibration_length': ,\n", " 'minimization_steps': 5000,\n", " 'n_replicas': 11,\n", " 'production_length': ,\n", " 'real_time_analysis_interval': ,\n", " 'real_time_analysis_minimum_time': ,\n", " 'sampler_method': 'repex',\n", " 'sams_flatness_criteria': 'logZ-flatness',\n", " 'sams_gamma0': 1.0,\n", " 'time_per_iteration': },\n", " 'solvation_settings': {'solvent_model': 'tip3p',\n", " 'solvent_padding': },\n", " 'thermo_settings': {'ph': None,\n", " 'pressure': ,\n", " 'redox_potential': None,\n", " 'temperature': }}\n" ] } ], "source": [ "protocol_settings" ] }, { "cell_type": "code", "execution_count": 20, "id": "c38305b0-879f-43b3-ba13-b010e478d2eb", "metadata": {}, "outputs": [], "source": [ "# Here we make it so that each simulation only features a single repeat\n", "# We then do multiple repeats by running each simulation multiple times\n", "protocol_settings.protocol_repeats = 1" ] }, { "cell_type": "markdown", "id": "3e2e440e-885d-4109-a845-8b7d96a35e60", "metadata": {}, "source": [ "We can now produce a parameterized `RelativeHybridTopologyProtocol` instance:" ] }, { "cell_type": "code", "execution_count": 21, "id": "bd1d0a0d-00c9-44a1-820c-186b4ee05334", "metadata": {}, "outputs": [], "source": [ "protocol = RelativeHybridTopologyProtocol(protocol_settings)" ] }, { "cell_type": "markdown", "id": "653a8d2f-a693-4ac1-99be-ece310f127e6", "metadata": {}, "source": [ "#### Build the `Transformation`s" ] }, { "cell_type": "markdown", "id": "c25fc59b-8cf8-48ca-81e9-15ffbdf2a16d", "metadata": {}, "source": [ "We can now construct the `Transformation`s we want represented in our network.\n", "\n", "We'll use `openfe`'s implementation of the `LomapAtomMapper` to produce mappings between ligands, the default LOMAP scorer for assessing the quality of the mappings produced, and the minimal spanning tree network planner. However, you could use any network planner of your choice to generate the network connections and mappings and use those instead." ] }, { "cell_type": "code", "execution_count": 22, "id": "a5bcca4e", "metadata": {}, "outputs": [], "source": [ "mapper = openfe.LomapAtomMapper(max3d=1.0, element_change=True)\n", "scorer = openfe.lomap_scorers.default_lomap_score\n", "network_planner = openfe.ligand_network_planning.generate_minimal_spanning_network" ] }, { "cell_type": "code", "execution_count": 23, "id": "cad6ecf6", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "81b932ea9a8d4333951fe37ecc0339fd", "version_major": 2, "version_minor": 0 }, "text/plain": [ " 88%|########8 | 69/78 [00:01<00:00, 45.56it/s]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Note creating a minimum spanning tree requires an all-to-all mapping generation\n", "# This can be quite time consuming...\n", "ligand_network = network_planner(\n", " ligands=ligands,\n", " mappers=[mapper],\n", " scorer=scorer\n", ")" ] }, { "cell_type": "code", "execution_count": 25, "id": "03b66822-212a-4522-bbbb-5f7cdc99213d", "metadata": {}, "outputs": [ { "data": { "image/png": "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iIhIpaQAKJXGr371K9avX09wcDD/+Mc/6NevHz///LOnyxIREal0FAClUunfvz+bN28mPDycTz/9lLvuuosffvjB02WJiIhUKgqAUunccccd7Ny5k/r16/PFF1/Qo0cPjh496umyREREKg0FQKmU2rZtS1paGjfffDNHjx6lR48efPnll54uS0REpFJQAJRK6+abbyY1NZU2bdrwww8/cOedd7J7925PlyUiIuL1FAClUmvQoAE7d+7kjjvu4Oeff+buu+9m06ZNni5LRETEqykASqVXq1YtNm3aRL9+/Thz5gyDBg1izZo1ni5LRETEaykASpVwww03sH79en71q19x8eJFRo4cyeLFiz1dloiIiFdSAJQqIyAggL/97W8kJCRgtVpJSEhgzpw5ni5LRETE6ygASpXi5+fHwoULSUpKAuDpp5/mqaeewmazebgyERER76EAKFWOxWIhOTmZF198EYC5c+eSkJDA5cuXPVyZiIiId1AAlCprypQpLFmyhGrVqrFkyRIeeOABzp8/7+myREREPE4BUKq0Rx55hPfee4+AgADWrFnDfffdR0FBgafLEhER8SgFQKnyhg0bxoYNG7jhhhvYtGkT99xzDzk5OZ4uS0RExGMUAMUn3HPPPWzZsoWIiAjS09O58847ycrKcqhtr14waZL5vmlTmD/fRUUW47nnoH17991PRER8gwKg+IwuXbqwc+dOGjZsyFdffUX37t3JzMws0zUyMiAhwUUFFmPKFNiyxT33On/ehE2LBfbvt58/cAAefBCaNIEaNaBlS3j1VffUJCIirqEAKD6ldevWpKWlccstt3Ds2DF69OjBN99843D7unUhONiFBV4lJARq13bPvZ58Eho2vPb83r3mc//1r/DVVzB9OiQlwf/8j3vqEhGRiqcAKD6nadOmpKam0q5dO7Kzs4mPjy9D26JDwIcPQ48eEBQErVrB5s2mB23dOseud/IkjBwJtWqZoDdkCBw7Zn/96iHgsWNh6FBITobISAgPh5kz4dIlmDoVIiKgcWNYutThjwTAxo2QkgIvvXTta3FxsGAB3HUX3HwzjB4Nv/kNfPBB2e4hIiLeQwFQfFJkZCTbt2+ne/fu5OfnO3UNq9WEseBgSE+HRYtM75ijzpyB3r1NL9/OnZCaar4fMAAuXCi53datkJVl2sybZ0JibKwJkenpkJho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", "text/plain": [ "
" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from openfe.utils.atommapping_network_plotting import plot_atommapping_network\n", "plot_atommapping_network(ligand_network)" ] }, { "cell_type": "markdown", "id": "e2a0653d-ef78-4c69-b9b7-962eb47329db", "metadata": {}, "source": [ "Since we are planning to perform relative binding free energy (RBFE) calculations, we'll define both *complex* and *solvent* variants for each `Transformation`:" ] }, { "cell_type": "code", "execution_count": 26, "id": "56ab9012-7fed-4a57-9433-970f1b5c92cf", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lig_ejm_46 lig_ejm_31\n", "lig_ejm_55 lig_ejm_43\n", "lig_ejm_31 lig_ejm_50\n", "lig_ejm_31 lig_ejm_48\n", "lig_ejm_47 lig_ejm_31\n", "lig_ejm_42 lig_ejm_50\n", "lig_jmc_23 lig_ejm_46\n", "lig_ejm_42 lig_ejm_43\n", "lig_jmc_23 lig_jmc_28\n", "lig_jmc_27 lig_jmc_28\n", "lig_ejm_54 lig_ejm_55\n", "lig_ejm_31 lig_ejm_45\n" ] } ], "source": [ "for mapping in ligand_network.edges:\n", " print(mapping.componentA.name, mapping.componentB.name)" ] }, { "cell_type": "code", "execution_count": 27, "id": "f3379b4a", "metadata": {}, "outputs": [], "source": [ "complexed_transformations = []\n", "solvated_transformations = []\n", "\n", "for mapping in ligand_network.edges:\n", " ligA_name = mapping.componentA.name\n", " ligB_name = mapping.componentB.name\n", " \n", " ligA = complexed[ligA_name]['ligand']\n", " ligB = complexed[ligB_name]['ligand']\n", " \n", " complexed_transformations.append(\n", " openfe.Transformation(stateA=complexed[ligA_name], \n", " stateB=complexed[ligB_name], \n", " mapping={'ligand': mapping},\n", " protocol=protocol,\n", " name=f\"{complexed[ligA_name].name}->{complexed[ligB_name].name}\")\n", " )\n", " solvated_transformations.append(\n", " openfe.Transformation(stateA=solvated[ligA_name], \n", " stateB=solvated[ligB_name], \n", " mapping={'ligand': mapping},\n", " protocol=protocol,\n", " name=f\"{solvated[ligA_name].name}->{solvated[ligB_name].name}\")\n", " )" ] }, { "cell_type": "markdown", "id": "3789edec-beaf-4bae-903b-da35910f848e", "metadata": {}, "source": [ "### Create the `AlchemicalNetwork`" ] }, { "cell_type": "markdown", "id": "618d399e-d66a-499e-b43a-684b5e1b8ec5", "metadata": {}, "source": [ "An `AlchemicalNetwork` is simply the combination of `ChemicalSystem`s (nodes) and `Transformation`s (directed edges) that we want to evaluate $\\Delta G$s for. This data structure functions as a declaration of what you want to compute.\n", "\n", "We'll finish here by creating an `AlchemicalNetwork` from the collection of objects we've built so far." ] }, { "cell_type": "code", "execution_count": 28, "id": "b45baada-efa4-46f7-a2cb-6e24a9309f1e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "network = openfe.AlchemicalNetwork(edges=(solvated_transformations + complexed_transformations), \n", " nodes=(list(solvated.values()) + list(complexed.values())),\n", " name=\"tyk2_relative_benchmark\")\n", "network" ] }, { "cell_type": "markdown", "id": "378a3bf0-7a45-4e70-84a5-49c850a1d441", "metadata": {}, "source": [ "That's it! We simply toss in all `Transformation`s (edges) and `ChemicalSystem`s (nodes) we want included in this `AlchemicalNetwork`, and optionally give it a name that means something to us (it need not be unique, but can be used to query for network(s) later)." ] }, { "cell_type": "markdown", "id": "dcc15882-61ab-44d1-9eb1-378901063f72", "metadata": {}, "source": [ "We could have chosen here to leave the `nodes` argument off, since every `ChemicalSystem` we included was already represented among the `edges`, but we show it here for completeness. In this way, it's possible to include `ChemicalSystem`s in the network that aren't connected via any `Transformation`s to others, though in practice there isn't much utility in this." ] }, { "cell_type": "markdown", "id": "2e9e4afd-f64b-406b-898e-4b8dcd2483ec", "metadata": {}, "source": [ "## Submitting an `AlchemicalNetwork` to `alchemiscale`" ] }, { "cell_type": "code", "execution_count": 29, "id": "4471ecb9-5e58-40b2-b959-9c1a04cbda72", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "alchemiscale version: 0.5.0\n" ] } ], "source": [ "import alchemiscale\n", "print(\"alchemiscale version: \", alchemiscale.__version__)" ] }, { "cell_type": "code", "execution_count": 30, "id": "c09991ea-bb8f-4907-9c99-94d5fe9c3714", "metadata": {}, "outputs": [], "source": [ "from alchemiscale import AlchemiscaleClient, Scope, ScopedKey\n", "from getpass import getpass" ] }, { "cell_type": "code", "execution_count": 31, "id": "03b860de-8cf7-4ec3-909f-708ab2165a7a", "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ " ········\n" ] } ], "source": [ "identity_key = getpass()" ] }, { "cell_type": "code", "execution_count": 32, "id": "544ba62a-68c2-42e4-98b2-a9067ab643ef", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "AlchemiscaleClient('https://api.alchemiscale.org')" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc = AlchemiscaleClient('https://api.alchemiscale.org', 'ddotson', identity_key)\n", "asc" ] }, { "cell_type": "code", "execution_count": 33, "id": "a124d7ec-fb70-4194-b26c-ba57293c27ae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.list_scopes()" ] }, { "cell_type": "code", "execution_count": 34, "id": "8a44648f-fc45-4bd1-8ce0-b12445f1f453", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.query_networks(scope=Scope('ddotson'))" ] }, { "cell_type": "markdown", "id": "042e6f29-0409-48d8-86a0-92b70fa30d87", "metadata": {}, "source": [ "`AlchemicalNetwork`s and the objects associated with them live in a *specific* `Scope`. Because my user identity is able to use any `Scope` from the above (`'*-*-*'`), I can choose whatever I want. `AlchemicalNetwork`s submitted to the same `Scope` will share `Transformation`s they have in common, along with results for those `Transformation`s; `AlchemicalNetwork`s in different `Scope`s will share nothing.\n", "\n", "How you choose to use the `Scope`s you have access to is entirely up to you. I'll choose this is my `Scope` for this network:" ] }, { "cell_type": "code", "execution_count": 35, "id": "194b7484-2db0-4255-84e6-dabe220ff455", "metadata": {}, "outputs": [], "source": [ "scope = Scope('ddotson', 'tyk2', 'demo')" ] }, { "cell_type": "markdown", "id": "ba9519cd-380a-4f92-99fb-799735ae835b", "metadata": {}, "source": [ "And then we'll submit the `AlchemicalNetwork` to that `Scope` with:" ] }, { "cell_type": "code", "execution_count": 36, "id": "503a72fb-7d6a-4206-a34b-4f696880b148", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "6dbc2f0a1b134571bae417ab2cef51d2", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "an_sk = asc.create_network(network, scope)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4fd3102-06f5-4da5-92c5-364ab0b9f625",
   "metadata": {},
   "source": [
    "We get back a `ScopedKey` for the `AlchemicalNetwork:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "57928257-eea8-43dd-8899-bde7550eac46",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       ""
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "an_sk"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "000921f6-9ad4-4f15-90df-7caf71534429",
   "metadata": {},
   "source": [
    "This uniquely identifies the `AlchemicalNetwork` in the database, and allows us to perform operations later on it. We can get the `ScopedKey`s for all `AlchemicalNetwork`s that exist in `Scope`s accessible to us with:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "89a4302b-1f3e-4aef-b20d-09ea763d9c80",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "asc.query_networks(scope=Scope('ddotson'))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee000fb8-f2e5-49c0-9f10-307eb1bff372",
   "metadata": {},
   "source": [
    "We can likewise retrieve an `AlchemicalNetwork` that we previously submitted with:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "0ee299eb-c5a4-4802-90ed-4096baf6ecd3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ff0bf3a744b9489faa1794cc93dbe3f0",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "network_again = asc.get_network(an_sk)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9e9b4910-873b-4c1b-b57e-be61f22ff90a",
   "metadata": {},
   "source": [
    "## Executing `Transformation`s by creating and actioning `Task`s"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "c3fa6874-78a2-41fb-a68d-235e15f2d21e",
   "metadata": {},
   "source": [
    "Submitting an `AlchemicalNetwork` with `create_network` only defines it on the server; it does not initiate any calculations. For this, we need to create and action `Task`s.\n",
    "\n",
    "To obtain a free energy estimate $\\Delta G$ for each `Transformation` in the `AlchemicalNetwork`, we'll create a `Task` for each one:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1e3f0956-5dc2-411b-8a57-1d73507f26fb",
   "metadata": {},
   "outputs": [],
   "source": [
    "tf_sks = asc.get_network_transformations(an_sk)\n",
    "tasks = asc.create_transformations_tasks(tf_sks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "e2033823-6d61-4d04-839a-79b2cbd1e11e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ]"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tasks"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51330a08-330e-48ea-a779-fc012147068f",
   "metadata": {},
   "source": [
    "Now checking the `AlchemicalNetwork` status, we see 24 `Task`s `'waiting'`, 1 for each `Transformation`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "728c5157-ff6c-4fb7-9925-418b00a7823a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                     0 │\n",
       "│ running                                                                                                      0 │\n",
       "│ waiting                                                                                                     24 │\n",
       "│ error                                                                                                        0 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 0\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 0\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 24\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 0\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'waiting': 24}" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "c4c4129f-e679-4364-ad6a-f158d246df2c", "metadata": {}, "source": [ "But there is one more step: `Task`s must also be *actioned* on the `AlchemicalNetwork` in order to be picked up by compute services:" ] }, { "cell_type": "code", "execution_count": 46, "id": "9c849250-8f08-4cc2-b32d-213392efb2e4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ,\n", " ]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.action_tasks(tasks, an_sk)" ] }, { "cell_type": "markdown", "id": "27535465-9080-405c-9533-409d3f00b859", "metadata": {}, "source": [ "The reason for this extra step is that a given `Transformation` may be a member of *multiple* `AlchemicalNetwork`s in its `Scope`. Computational effort is independently allocated on each `AlchemicalNetwork` through its *actioned* `Task`s, and these can differ between `AlchemicalNetwork`s in the same `Scope`. In the future, automated `Strategy`s will operate on individual `AlchemicalNetwork`s, and this ability to independently choose where to apply effort is critical for this." ] }, { "cell_type": "markdown", "id": "f0f03f45-3766-4258-a025-a786affb7ad8", "metadata": {}, "source": [ "After *actioning* our `Task`s, we can see that some have been picked up and are now `'running'`:" ] }, { "cell_type": "code", "execution_count": 47, "id": "d1a27b3f-e2e3-4501-b1cc-e475ccc6a24b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                     0 │\n",
       "│ running                                                                                                      0 │\n",
       "│ waiting                                                                                                     24 │\n",
       "│ error                                                                                                        0 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 0\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 0\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 24\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 0\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'waiting': 24}" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "902d1474-d43d-48f8-bdcf-5cee9e61145b", "metadata": {}, "source": [ "Later on, some are now `'complete'`:" ] }, { "cell_type": "code", "execution_count": 53, "id": "67f5edd1-9775-45e1-a161-85cf12c67265", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                     4 │\n",
       "│ running                                                                                                     12 │\n",
       "│ waiting                                                                                                      8 │\n",
       "│ error                                                                                                        0 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 4\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 12\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 8\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 0\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'waiting': 8, 'complete': 4, 'running': 12}" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "a30d40aa-ee2a-4811-a21e-baa143b15686", "metadata": {}, "source": [ "...and some might have errored:" ] }, { "cell_type": "code", "execution_count": 54, "id": "d78652a8-ecee-491e-aedc-c9312682c418", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                    14 │\n",
       "│ running                                                                                                      9 │\n",
       "│ waiting                                                                                                      0 │\n",
       "│ error                                                                                                        1 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 14\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 9\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 0\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 1\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'error': 1, 'running': 9, 'complete': 14}" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "ce6a0d3c-7276-47c4-a7a5-949e25a49fd9", "metadata": {}, "source": [ "...and at some point, none are `waiting` or `running`; they are either `complete` or `errored`:" ] }, { "cell_type": "code", "execution_count": 67, "id": "033a8832-e89b-42c7-85ce-e691be138c26", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                    21 │\n",
       "│ running                                                                                                      0 │\n",
       "│ waiting                                                                                                      0 │\n",
       "│ error                                                                                                        3 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 21\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 0\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 0\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 3\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'error': 3, 'complete': 21}" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "9dd5fce4-fc5d-4bc4-add2-1ecd6d0c893f", "metadata": {}, "source": [ "### Dealing with errors" ] }, { "cell_type": "markdown", "id": "b0901744-073e-4ea4-9b5f-b9a49eeb3186", "metadata": {}, "source": [ "Inevitably, some of your `Task`s will encounter problems in execution, either random or systematic errors. When this happens, the `Task` status will be set to `'error'`." ] }, { "cell_type": "markdown", "id": "5821a742-cea8-4b58-9905-e1aac1967c85", "metadata": {}, "source": [ "We'll get all the `Task`s in this `AlchemicalNetwork` with status `'error'`:" ] }, { "cell_type": "code", "execution_count": 68, "id": "2a75797f-4289-4b49-9165-dd7252d055fd", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ,\n", " ]" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "failed_tasks = asc.get_network_tasks(an_sk, status='error')\n", "failed_tasks" ] }, { "cell_type": "markdown", "id": "2d29bb76-91cd-4c20-afbc-e2210e5fc170", "metadata": {}, "source": [ "We'll choose one, and get all the failed results for it:" ] }, { "cell_type": "code", "execution_count": 69, "id": "10bb091c-99f4-4dc6-9e57-bd2e6a780761", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8bb66e693c9d492186fa5869476610ab", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-15fdd9ff3f68cde67e706ffa87f6a9b7-ddotson-tyk2-demo/failures/ProtocolDAGResultRef-2bc722e46be751f9ec1a770028f393f7-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n" ] }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "failures = asc.get_task_failures(failed_tasks[0])\n",
    "failures"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9b99430-c434-4d5d-a5c7-e60744421a99",
   "metadata": {},
   "source": [
    "Each of these is a `ProtocolDAGResult`, but with at least one `ProtocolUnitFailure`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "b37bc64d-8fc1-42c5-8b88-4383c53f91da",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       ""
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "failures[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "4ffe5d77-f42f-4157-b8d1-d8c85c241bbf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[ProtocolUnitFailure(lig_jmc_27 to lig_jmc_28 repeat 0 generation 0),\n",
       " ProtocolUnitFailure(lig_jmc_27 to lig_jmc_28 repeat 0 generation 0),\n",
       " ProtocolUnitFailure(lig_jmc_27 to lig_jmc_28 repeat 0 generation 0),\n",
       " ProtocolUnitFailure(lig_jmc_27 to lig_jmc_28 repeat 0 generation 0)]"
      ]
     },
     "execution_count": 71,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "failures[0].protocol_unit_failures"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76edada2-2271-4a41-94e5-67a896c43b50",
   "metadata": {},
   "source": [
    "We can introspect the `traceback` on any of the `ProtocolUnitFailure`s present in the `ProtocolDAGResult` to understand what went wrong here:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "8bba1453-7a1b-4f6d-8f20-05009d22ba76",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Traceback (most recent call last):\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/gufe/protocols/protocolunit.py\", line 320, in execute\n",
      "    outputs = self._execute(context, **inputs)\n",
      "              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/equil_rfe_methods.py\", line 1129, in _execute\n",
      "    outputs = self.run(scratch_basepath=ctx.scratch,\n",
      "              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/equil_rfe_methods.py\", line 998, in run\n",
      "    sampler.setup(\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/_rfe_utils/multistate.py\", line 121, in setup\n",
      "    minimize(compound_thermostate_copy, sampler_state,\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/_rfe_utils/multistate.py\", line 295, in minimize\n",
      "    context, integrator = dummy_cache.get_context(\n",
      "                          ^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openmmtools/cache.py\", line 770, in get_context\n",
      "    context = thermodynamic_state.create_context(integrator, self.platform)\n",
      "              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openmmtools/states.py\", line 1179, in create_context\n",
      "    return openmm.Context(system, integrator, platform)\n",
      "           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openmm/openmm.py\", line 8037, in __init__\n",
      "    _openmm.Context_swiginit(self, _openmm.new_Context(*args))\n",
      "                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "openmm.OpenMMException: Error initializing CUDA: CUDA_ERROR_MPS_CONNECTION_FAILED (805) at /home/conda/feedstock_root/build_artifacts/openmm_1721257909416/work/platforms/cuda/src/CudaContext.cpp:91\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(failures[0].protocol_unit_failures[0].traceback)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f715ef3-b1a0-456a-ac8d-51ee5b6897eb",
   "metadata": {},
   "source": [
    "In this case, it like it may be due to a configuration issue on a compute resource our `Task`s are landing on."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a78576b-678d-4ab8-916e-90a771f24f4b",
   "metadata": {},
   "source": [
    "If we wish to re-run an `'error'`ed `Task`, we can do so by setting its status back to `'waiting'`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "4c661612-7cfa-4b55-95d0-713d8fcbee22",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:\tHTTP Request: POST https://api.alchemiscale.org/bulk/tasks/status/set \"HTTP/1.1 200 OK\"\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "asc.set_tasks_status(failed_tasks[:1], 'waiting')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c7ccd13c-e1c2-4de5-ae17-c3b6177aa44f",
   "metadata": {},
   "source": [
    "## Gathering and analyzing results"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d696f2b-3956-468b-bcf4-1553943c37c9",
   "metadata": {},
   "source": [
    "We can gather results for each `Transformation` with:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "id": "704c9ddd-be00-43c3-9bc1-2ce99fb3fe02",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-82e90d15b483a813a6501073e3964930-ddotson-tyk2-demo/results/ProtocolDAGResultRef-01a2e46b4c33a9c52aab71b8c01ba5cd-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-73164716e2ad3c2e410fce413fa41be4-ddotson-tyk2-demo/results/ProtocolDAGResultRef-caabc7fbbe8e9bae4ad0da4f5db7cb61-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-e3022bfd607e772136f5c262875a8e78-ddotson-tyk2-demo/results/ProtocolDAGResultRef-b6b00c75b4f66e546623a98d42b165c8-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-6064e55fed6e90b90b727b299462cbad-ddotson-tyk2-demo/results/ProtocolDAGResultRef-f87f2f38715e0e03c30b574fe3c0e01d-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-28453f83bb03486a08afc096a8dc5298-ddotson-tyk2-demo/results/ProtocolDAGResultRef-d206475f1ae25c4818964579eabca7b0-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-eebbe29feefc097086749081844d8adc-ddotson-tyk2-demo/results/ProtocolDAGResultRef-2a9f4953c83460388614a4cb872bc601-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-2a345646fa5b3900aba8b74935fc4ec6-ddotson-tyk2-demo/results/ProtocolDAGResultRef-821c1a7ccc7740a28f4dd3d553b2f035-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-f8fb4a09881bce886dcb55a88be49016-ddotson-tyk2-demo/results/ProtocolDAGResultRef-8295104d5c32f10bdd86b69675bb7494-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-874c39cca17041ceb7a91f142104e8eb-ddotson-tyk2-demo/results/ProtocolDAGResultRef-2d7d1eed2ee1b96e67c95385c14b220c-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-b4857c06e9564cf3c2451f436f7af410-ddotson-tyk2-demo/results/ProtocolDAGResultRef-fdea668674894a4ebc21cd51a9ca8e02-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-958a3d55d581ec276b72394435df4bd0-ddotson-tyk2-demo/results/ProtocolDAGResultRef-19825c22d09bf2a8d70e47e5cac34829-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-22a2847c2a28584956e90d549fc6bcc6-ddotson-tyk2-demo/results/ProtocolDAGResultRef-83f986401353591db65c9ed401af260b-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-d5cdd9f4f4edd380361129082a01360b-ddotson-tyk2-demo/results/ProtocolDAGResultRef-57a8c3097273d30ff5b0350943883824-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-20fd18a057e4affd5c78cad41a81d3b4-ddotson-tyk2-demo/results/ProtocolDAGResultRef-2798447525f7139b158919d08faadb95-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-44cf523e9d0e53674fadc59c9b9110b7-ddotson-tyk2-demo/results/ProtocolDAGResultRef-f56c970e363dbe075f2dda74386055a8-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-856f85d23d9b8b84916d5b83ebfa1773-ddotson-tyk2-demo/results/ProtocolDAGResultRef-f94dec1b5cc13aff45aba30eb1647c3c-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-ef57a778259ba88b9fb4c23cc2bd78f4-ddotson-tyk2-demo/results/ProtocolDAGResultRef-474df4f73b5bdb270a43361d8651dfa4-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-c33480c9f0dfd80852541205f46914a7-ddotson-tyk2-demo/results/ProtocolDAGResultRef-943e801e0c7774f3c962ca8127150ace-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-4bfeb3edd7f0d47ec52f533a5cf435a0-ddotson-tyk2-demo/results/ProtocolDAGResultRef-0d56400cc2c06fe557f170b872c9a465-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-06eac733376ab1ff566248040fe37e01-ddotson-tyk2-demo/results/ProtocolDAGResultRef-cc1df82df45efd8fba44f029a28094b6-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n",
      "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-76de739d87d53981abfff4ab9ce071e4-ddotson-tyk2-demo/results/ProtocolDAGResultRef-810f1f48475da9a8cbb7ed364848cdf2-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n"
     ]
    }
   ],
   "source": [
    "results = dict()\n",
    "for tf_sk in asc.get_network_transformations(an_sk):\n",
    "    results[str(tf_sk)] = asc.get_transformation_results(tf_sk, visualize=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "id": "816d46a2-178b-459a-80a5-357b5438462a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'Transformation-15fdd9ff3f68cde67e706ffa87f6a9b7-ddotson-tyk2-demo': None,\n",
       " 'Transformation-152928d4d69298dcedf2dd622073a95b-ddotson-tyk2-demo': None,\n",
       " 'Transformation-82e90d15b483a813a6501073e3964930-ddotson-tyk2-demo': ,\n",
       " 'Transformation-73164716e2ad3c2e410fce413fa41be4-ddotson-tyk2-demo': ,\n",
       " 'Transformation-e3022bfd607e772136f5c262875a8e78-ddotson-tyk2-demo': ,\n",
       " 'Transformation-6064e55fed6e90b90b727b299462cbad-ddotson-tyk2-demo': ,\n",
       " 'Transformation-28453f83bb03486a08afc096a8dc5298-ddotson-tyk2-demo': ,\n",
       " 'Transformation-eebbe29feefc097086749081844d8adc-ddotson-tyk2-demo': ,\n",
       " 'Transformation-2a345646fa5b3900aba8b74935fc4ec6-ddotson-tyk2-demo': ,\n",
       " 'Transformation-f8fb4a09881bce886dcb55a88be49016-ddotson-tyk2-demo': ,\n",
       " 'Transformation-874c39cca17041ceb7a91f142104e8eb-ddotson-tyk2-demo': ,\n",
       " 'Transformation-b4857c06e9564cf3c2451f436f7af410-ddotson-tyk2-demo': ,\n",
       " 'Transformation-958a3d55d581ec276b72394435df4bd0-ddotson-tyk2-demo': ,\n",
       " 'Transformation-22a2847c2a28584956e90d549fc6bcc6-ddotson-tyk2-demo': ,\n",
       " 'Transformation-d5cdd9f4f4edd380361129082a01360b-ddotson-tyk2-demo': ,\n",
       " 'Transformation-20fd18a057e4affd5c78cad41a81d3b4-ddotson-tyk2-demo': ,\n",
       " 'Transformation-44cf523e9d0e53674fadc59c9b9110b7-ddotson-tyk2-demo': ,\n",
       " 'Transformation-856f85d23d9b8b84916d5b83ebfa1773-ddotson-tyk2-demo': ,\n",
       " 'Transformation-ef57a778259ba88b9fb4c23cc2bd78f4-ddotson-tyk2-demo': ,\n",
       " 'Transformation-c33480c9f0dfd80852541205f46914a7-ddotson-tyk2-demo': ,\n",
       " 'Transformation-4bfeb3edd7f0d47ec52f533a5cf435a0-ddotson-tyk2-demo': ,\n",
       " 'Transformation-8e74110792d4c68bb5a772733d490401-ddotson-tyk2-demo': None,\n",
       " 'Transformation-06eac733376ab1ff566248040fe37e01-ddotson-tyk2-demo': ,\n",
       " 'Transformation-76de739d87d53981abfff4ab9ce071e4-ddotson-tyk2-demo': }"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "id": "35d41826-c6fa-44fe-aec9-45e85bd5d30c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "20.937595533249475 kilocalorie_per_mole"
      ],
      "text/latex": [
       "$20.937595533249475\\ \\mathrm{kilocalorie\\_per\\_mole}$"
      ],
      "text/plain": [
       "20.937595533249475 "
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results['Transformation-82e90d15b483a813a6501073e3964930-ddotson-tyk2-demo'].get_estimate()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "id": "88efaebb-a47b-4a53-b6b9-382bcfc2b1ec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "0.0 kilocalorie_per_mole"
      ],
      "text/latex": [
       "$0.0\\ \\mathrm{kilocalorie\\_per\\_mole}$"
      ],
      "text/plain": [
       "0.0 "
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results['Transformation-82e90d15b483a813a6501073e3964930-ddotson-tyk2-demo'].get_uncertainty()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60d404e8-11ab-4ead-b0db-eddaca9e2c51",
   "metadata": {},
   "source": [
    "In this case, we have only a single `ProtocolDAGResult` for each `Transformation` (since we created and actioned only 1 `Task` for each), and so the uncertainty (standard deviation between replicate simulations) given for this `ProtocolResult` is 0.0. The `RelativeHybridTopologyProtocol` combines `ProtocolDAGResult` values statistically, reducing the uncertainty but not increasing convergence with additional `Task`s\n",
    "\n",
    "By contrast other `Protocol`s, such as the `feflow` `NonEquilibriumCyclingProtocol`, will improve convergence with more `Task`s on a given `Transformation`; in the case of the `NonEquilibriumCyclingProtocol`, the non-equilibrium work values for each `ProtocolDAGResult` are combined together and fed to `BAR` to produce a single estimate with its own uncertainty."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ec2ca825-c330-4c69-9079-82b22ee53dc1",
   "metadata": {},
   "source": [
    "Let's create and action 2 additional `Task`s for each `Transformation`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "id": "78a17d4c-da4d-4879-a7d1-ae81f158fc00",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ,\n",
       " ]"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tasks = []\n",
    "for tf_sk in asc.get_network_transformations(an_sk):\n",
    "    tasks.extend(asc.create_tasks(tf_sk, count=2))\n",
    "\n",
    "asc.action_tasks(tasks, an_sk)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "id": "7416399a-a06c-461f-a1ae-739bd46abcdb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                    21 │\n",
       "│ running                                                                                                      0 │\n",
       "│ waiting                                                                                                     49 │\n",
       "│ error                                                                                                        2 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 21\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 0\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 49\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 2\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'waiting': 49, 'error': 2, 'complete': 21}" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "082fbe22-3579-4900-8567-f0eda0e94ce7", "metadata": {}, "source": [ "As we watch our `Task`s `'complete'` or `'error'`, we can introspect and deal with errors as before:" ] }, { "cell_type": "code", "execution_count": 84, "id": "9c0f6683-603d-4a82-8255-104e473cb4a6", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                    46 │\n",
       "│ running                                                                                                     24 │\n",
       "│ waiting                                                                                                      0 │\n",
       "│ error                                                                                                        2 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 46\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 24\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 0\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 2\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'complete': 46, 'running': 24, 'error': 2}" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "code", "execution_count": 85, "id": "892122f7-95c9-47e0-8931-f15ab9f2efae", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[,\n", " ]" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_tasks(an_sk, status='error')" ] }, { "cell_type": "code", "execution_count": 86, "id": "cbfe1d37-0934-4121-abbb-09d7c1f19396", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "a679f2867bb946d9963cdb603c80bf52", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:\tHTTP Request: GET https://api.alchemiscale.org/transformations/Transformation-152928d4d69298dcedf2dd622073a95b-ddotson-tyk2-demo/failures/ProtocolDAGResultRef-08d10b9130b46d11e70cdf91343e686e-ddotson-tyk2-demo \"HTTP/1.1 200 OK\"\n" ] }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Traceback (most recent call last):\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/gufe/protocols/protocolunit.py\", line 320, in execute\n",
      "    outputs = self._execute(context, **inputs)\n",
      "              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/equil_rfe_methods.py\", line 1129, in _execute\n",
      "    outputs = self.run(scratch_basepath=ctx.scratch,\n",
      "              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/equil_rfe_methods.py\", line 998, in run\n",
      "    sampler.setup(\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/_rfe_utils/multistate.py\", line 121, in setup\n",
      "    minimize(compound_thermostate_copy, sampler_state,\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openfe/protocols/openmm_rfe/_rfe_utils/multistate.py\", line 295, in minimize\n",
      "    context, integrator = dummy_cache.get_context(\n",
      "                          ^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openmmtools/cache.py\", line 770, in get_context\n",
      "    context = thermodynamic_state.create_context(integrator, self.platform)\n",
      "              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openmmtools/states.py\", line 1179, in create_context\n",
      "    return openmm.Context(system, integrator, platform)\n",
      "           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "  File \"/lila/home/dotson/mambaforge/envs/alchemiscalemiscale-compute-ddotson-v0.5.0-2024.08.15/lib/python3.12/site-packages/openmm/openmm.py\", line 8037, in __init__\n",
      "    _openmm.Context_swiginit(self, _openmm.new_Context(*args))\n",
      "                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
      "openmm.OpenMMException: Error initializing CUDA: CUDA_ERROR_MPS_CONNECTION_FAILED (805) at /home/conda/feedstock_root/build_artifacts/openmm_1721257909416/work/platforms/cuda/src/CudaContext.cpp:91\n",
      "\n"
     ]
    }
   ],
   "source": [
    "print(asc.get_task_failures(asc.get_network_tasks(an_sk, status='error')[0])[0].protocol_unit_failures[0].traceback)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "id": "42b373ed-2ec3-4e10-a551-034fdd2b5ed6",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:\tHTTP Request: POST https://api.alchemiscale.org/bulk/tasks/status/set \"HTTP/1.1 200 OK\"\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "[,\n",
       " ]"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "asc.set_tasks_status(asc.get_network_tasks(an_sk, status='error'), 'waiting')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "id": "55c733aa-3e41-481c-8f63-df7b2c8a79de",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "
AlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo                                               \n",
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃ status                                                                                                   count ┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n",
       "│ complete                                                                                                    72 │\n",
       "│ running                                                                                                      0 │\n",
       "│ waiting                                                                                                      0 │\n",
       "│ error                                                                                                        0 │\n",
       "│ invalid                                                                                                      0 │\n",
       "│ deleted                                                                                                      0 │\n",
       "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n",
       "
\n" ], "text/plain": [ "\u001b[3mAlchemicalNetwork-6f22642592f789c4e7f918412ca947c5-ddotson-tyk2-demo \u001b[0m\n", "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n", "┃\u001b[1m \u001b[0m\u001b[1mstatus \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m count\u001b[0m\u001b[1m \u001b[0m┃\n", "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩\n", "│\u001b[32m \u001b[0m\u001b[32mcomplete \u001b[0m\u001b[32m \u001b[0m│\u001b[32m \u001b[0m\u001b[32m 72\u001b[0m\u001b[32m \u001b[0m│\n", "│\u001b[38;5;172m \u001b[0m\u001b[38;5;172mrunning \u001b[0m\u001b[38;5;172m \u001b[0m│\u001b[38;5;172m \u001b[0m\u001b[38;5;172m 0\u001b[0m\u001b[38;5;172m \u001b[0m│\n", "│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208mwaiting \u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\u001b[38;2;23;147;208m \u001b[0m\u001b[38;2;23;147;208m 0\u001b[0m\u001b[38;2;23;147;208m \u001b[0m│\n", "│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58merror \u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\u001b[38;2;255;7;58m \u001b[0m\u001b[38;2;255;7;58m 0\u001b[0m\u001b[38;2;255;7;58m \u001b[0m│\n", "│\u001b[38;5;201m \u001b[0m\u001b[38;5;201minvalid \u001b[0m\u001b[38;5;201m \u001b[0m│\u001b[38;5;201m \u001b[0m\u001b[38;5;201m 0\u001b[0m\u001b[38;5;201m \u001b[0m│\n", "│\u001b[38;5;129m \u001b[0m\u001b[38;5;129mdeleted \u001b[0m\u001b[38;5;129m \u001b[0m│\u001b[38;5;129m \u001b[0m\u001b[38;5;129m 0\u001b[0m\u001b[38;5;129m \u001b[0m│\n", "└──────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────┘\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "{'complete': 72}" ] }, "execution_count": 98, "metadata": {}, "output_type": "execute_result" } ], "source": [ "asc.get_network_status(an_sk)" ] }, { "cell_type": "markdown", "id": "aa4146ff-baf8-4af1-b84f-12c0368631a3", "metadata": {}, "source": [ "Finally, with more sampling, we can pull our results again, this time with more `ProtocolDAGResult`s included in the `ProtocolResult` for our `Transformation`s:" ] }, { "cell_type": "code", "execution_count": 102, "id": "43aa0be9-4306-48f8-a3c6-e6851b05d553", "metadata": {}, "outputs": [], "source": [ "results = dict()\n", "for tf_sk in asc.get_network_transformations(an_sk):\n", " results[str(tf_sk)] = asc.get_transformation_results(tf_sk, visualize=False)" ] }, { "cell_type": "code", "execution_count": 103, "id": "bd6409b5-1ec9-469e-b7e7-5d0dbb2c29b3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Transformation-15fdd9ff3f68cde67e706ffa87f6a9b7-ddotson-tyk2-demo': ,\n", " 'Transformation-152928d4d69298dcedf2dd622073a95b-ddotson-tyk2-demo': ,\n", " 'Transformation-82e90d15b483a813a6501073e3964930-ddotson-tyk2-demo': ,\n", " 'Transformation-73164716e2ad3c2e410fce413fa41be4-ddotson-tyk2-demo': ,\n", " 'Transformation-e3022bfd607e772136f5c262875a8e78-ddotson-tyk2-demo': ,\n", " 'Transformation-6064e55fed6e90b90b727b299462cbad-ddotson-tyk2-demo': ,\n", " 'Transformation-28453f83bb03486a08afc096a8dc5298-ddotson-tyk2-demo': ,\n", " 'Transformation-eebbe29feefc097086749081844d8adc-ddotson-tyk2-demo': ,\n", " 'Transformation-2a345646fa5b3900aba8b74935fc4ec6-ddotson-tyk2-demo': ,\n", " 'Transformation-f8fb4a09881bce886dcb55a88be49016-ddotson-tyk2-demo': ,\n", " 'Transformation-874c39cca17041ceb7a91f142104e8eb-ddotson-tyk2-demo': ,\n", " 'Transformation-b4857c06e9564cf3c2451f436f7af410-ddotson-tyk2-demo': ,\n", " 'Transformation-958a3d55d581ec276b72394435df4bd0-ddotson-tyk2-demo': ,\n", " 'Transformation-22a2847c2a28584956e90d549fc6bcc6-ddotson-tyk2-demo': ,\n", " 'Transformation-d5cdd9f4f4edd380361129082a01360b-ddotson-tyk2-demo': ,\n", " 'Transformation-20fd18a057e4affd5c78cad41a81d3b4-ddotson-tyk2-demo': ,\n", " 'Transformation-44cf523e9d0e53674fadc59c9b9110b7-ddotson-tyk2-demo': ,\n", " 'Transformation-856f85d23d9b8b84916d5b83ebfa1773-ddotson-tyk2-demo': ,\n", " 'Transformation-ef57a778259ba88b9fb4c23cc2bd78f4-ddotson-tyk2-demo': ,\n", " 'Transformation-c33480c9f0dfd80852541205f46914a7-ddotson-tyk2-demo': ,\n", " 'Transformation-4bfeb3edd7f0d47ec52f533a5cf435a0-ddotson-tyk2-demo': ,\n", " 'Transformation-8e74110792d4c68bb5a772733d490401-ddotson-tyk2-demo': ,\n", " 'Transformation-06eac733376ab1ff566248040fe37e01-ddotson-tyk2-demo': ,\n", " 'Transformation-76de739d87d53981abfff4ab9ce071e4-ddotson-tyk2-demo': }" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] }, { "cell_type": "markdown", "id": "09170a13-accb-4b8e-a817-f76ad2e572d1", "metadata": {}, "source": [ "## Advanced example: comparing results to experimental values with `cinnabar`" ] }, { "cell_type": "markdown", "id": "1ffedcc8-91c0-4448-b249-e2c42699aab5", "metadata": {}, "source": [ "Source notebook: `https://github.com/IAlibay/alchemiscale-utilities/blob/main/notebooks/TYK2_MST/Alchemiscale_submit_and_analyze.ipynb`" ] }, { "cell_type": "markdown", "id": "394a112f-d3c5-4ecb-8c6e-8137c63cd106", "metadata": {}, "source": [ "We can gather up results for each `Transformation` as above and put into a form suitable for use with `cinnabar`. This will allow us to compare to experimental values for the binding free energies of these ligands. We use experimental values listed in `ligands.yml`, originally sourced from [openforcefield/protein-ligand-benchmark](https://github.com/openforcefield/protein-ligand-benchmark):" ] }, { "cell_type": "code", "execution_count": 104, "id": "0717730d-dc4a-4ee5-a7e9-6af423c3335c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lig_ejm_31:\n", " measurement:\n", " comment: Table 4, entry 31\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.029\n", " type: ki\n", " unit: uM\n", " value: 0.096\n", " name: lig_ejm_31\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C([H])([H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_42:\n", " measurement:\n", " comment: Table 4, entry 42\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.019\n", " type: ki\n", " unit: uM\n", " value: 0.064\n", " name: lig_ejm_42\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C([H])([H])C([H])([H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_43:\n", " measurement:\n", " comment: Table 4, entry 43\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.25\n", " type: ki\n", " unit: uM\n", " value: 0.84\n", " name: lig_ejm_43\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C([H])(C([H])([H])[H])C([H])([H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_45:\n", " measurement:\n", " comment: Table 4, entry 45\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.028\n", " type: ki\n", " unit: uM\n", " value: 0.094\n", " name: lig_ejm_45\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C([H])([H])C3(C(C3([H])[H])([H])[H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_46:\n", " measurement:\n", " comment: Table 4, entry 46\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.0014\n", " type: ki\n", " unit: uM\n", " value: 0.0048\n", " name: lig_ejm_46\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C3(C(C3([H])[H])([H])[H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_47:\n", " measurement:\n", " comment: Table 4, entry 47\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.022\n", " type: ki\n", " unit: uM\n", " value: 0.074\n", " name: lig_ejm_47\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C3(C(C(C3([H])[H])([H])[H])([H])[H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_48:\n", " measurement:\n", " comment: Table 4, entry 48\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.072\n", " type: ki\n", " unit: uM\n", " value: 0.24\n", " name: lig_ejm_48\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C3(C(C(C(C3([H])[H])([H])[H])([H])[H])([H])[H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_50:\n", " measurement:\n", " comment: Table 4, entry 50\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.075\n", " type: ki\n", " unit: uM\n", " value: 0.25\n", " name: lig_ejm_50\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)C([H])([H])O[H])[H])[H])Cl)[H]'\n", "lig_ejm_54:\n", " measurement:\n", " comment: Table 4, entry 54\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.0054\n", " type: ki\n", " unit: uM\n", " value: 0.018\n", " name: lig_ejm_54\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)N([H])C([H])([H])C([H])([H])[H])[H])[H])Cl)[H]'\n", "lig_ejm_55:\n", " measurement:\n", " comment: Table 4, entry 55\n", " doi: 10.1016/j.ejmech.2013.03.070\n", " error: 0.051\n", " type: ki\n", " unit: uM\n", " value: 0.17\n", " name: lig_ejm_55\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)OC([H])([H])[H])[H])[H])Cl)[H]'\n", "lig_jmc_23:\n", " measurement:\n", " comment: Table 2, entry 23; values for four different enantionmers listed, this\n", " one is for cis\n", " doi: 10.1021/jm400266t\n", " error: 0.75\n", " type: ki\n", " unit: nM\n", " value: 2.5\n", " name: lig_jmc_23\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)[C@@]3([C@](C3([H])[H])([H])F)[H])[H])[H])Cl)[H]'\n", "lig_jmc_27:\n", " measurement:\n", " comment: Table 2, entry 27; cis enantiomer\n", " doi: 10.1021/jm400266t\n", " error: 1.5\n", " type: ki\n", " unit: nM\n", " value: 5.1\n", " name: lig_jmc_27\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)[C@@]3([C@](C3([H])[H])([H])Cl)[H])[H])[H])Cl)[H]'\n", "lig_jmc_28:\n", " measurement:\n", " comment: Table 2, entry 28; cis enantiomer\n", " doi: 10.1021/jm400266t\n", " error: 2.6\n", " type: ki\n", " unit: nM\n", " value: 8.5\n", " name: lig_jmc_28\n", " smiles: '[H]c1c(c(c(c(c1[H])Cl)C(=O)N([H])c2c(c(nc(c2[H])N([H])C(=O)[C@@]3([C@](C3([H])[H])([H])C([H])([H])[H])[H])[H])[H])Cl)[H]'\n" ] } ], "source": [ "%cat ligands.yml" ] }, { "cell_type": "code", "execution_count": 105, "id": "7076019c-aa12-4be3-9b87-f864b5a5ffd8", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path" ] }, { "cell_type": "code", "execution_count": 106, "id": "f688cd6c", "metadata": {}, "outputs": [], "source": [ "# Next we define a convenience method to check what type of transformation we are looking at\n", "def _scan_components(system):\n", " comps = system.components.values()\n", " if any([isinstance(comp, openfe.ProteinComponent) for comp in comps]):\n", " return \"complex\"\n", " elif any([isinstance(comp, openfe.SolventComponent) for comp in comps]):\n", " return \"solvent\"\n", " else:\n", " return \"vacuum\"" ] }, { "cell_type": "code", "execution_count": 109, "id": "7af574ec", "metadata": { "scrolled": true }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "5640f16b208b45b2bed156a7c1cd2abb", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Output()" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "845047b7a9cf4c85ac99743a3ecc518e",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "47d1c9fb6abb40c69bebf036eda37a9a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c53caabbffe2450abf5a5bf7d79b2971",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ad925a7d7ac140c1a4f8c5afb8478ebb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5ef90d51ad2046f289db987ff1b4628a",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "838201f53e1d4149a9c1536443aee3ce",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d50442f24ec94b24a8d68d020d93cee6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "674d814a72ba4fb2b636162ac63fb280",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "383e725ae62d4df2ae55b14e084af261",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1fb3baae68dd4fb08ff1030ced2b6d11",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bf1110fdffb9434c9592b9b1fcb8b2de",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "4f822a027b4c46b5bc1ac9d2eb08a3ef",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b9698a65e59240799d4b01943b45b1a8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "24b046c1c06b4822be16f35b329bbb80",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "42932d87f6764a7bac5f55f07ae87ebb",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "79ba040445ac48c8b4a023921860635d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "76d1dfe808aa48ecb5fb51d28a651260",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "7c5b48f995964c688cd4d4616db9a98b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ae39c441c65f458c89733f8999647ff6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "142d2b7e001649bc92c1f67dcd68aa61",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "d9edac5adf1b4b23895a97f732085228",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e6430eb94a95449e8cf05b40dd35c53c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "705fc471c9934c73ab154770dfa260fa",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a824882f0bcd4aee8837198ff622ab98",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "263ceb1b35844f688257019aab56abdf",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bd7e31f3b1ab43e491fd8d9971cfd816",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "dc2a347f4b5c4505bbab03b8a0282265",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "583bf82b76cd45369508e44eee099745",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3d68642ae3b74b7d9ed59c8bac3d6183",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "811f3559740f457396013e40808136b6",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e8d49748a3a54b6bb02ba88534338eba",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cc5410edf0f54836bda93c10ddf338a7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f53b79d2deb44be78d72ce65994faefa",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a42280ce12b74e409c0750c577fdae5d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a4dc7fa912944302b857ae7f850e4f90",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e8962d615e9a4e27ba7d8c5054102a2d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "383eb5aebf724c72acb6ad6b0441e12b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8d2fddee302348ec8d84e9ac59074882",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a5edea747d104f6b8c446502ad7018b2",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c1f70064159645b38c3c77cdf96c1092",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "bc2f90eccdf743d0b27c13d70f2a0530",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f3bfab0988684822ae3827397bb21747",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f7dff08088554f3689630d034311ad15",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "720a037fd3634ad390d57a41e624c52d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "afc64bb900fe4ea7a386995529725151",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "53bc5bb6d8ec40e884b4a2c9c4305b1c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a75e01b4007b4dfc981d0a7180dc91ce",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "5db61c39491b4c5788065e9144912f99",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "1a5fc3c12fa14995ae9c8da66f978ddd",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "70a986f7ce2c43dbaa0ea6ead8342e59",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e61f3b4367034945b3265f576dfad535",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ee2922bba40c4bb1840d35a806d217b8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "c1e2d7ea12984bfead52f1ee8f07f643",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "8a8902fc7888428b8717f700d044c94f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a9b270285b394c48bb5da6e7978be104",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "2e208d5417e34d38bfc7d2b5b9a1a245",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "f4d94b60391f4557800763de8c0b7d0f",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "cb6fb55d42a545bbad0feae5e94e8fc7",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "9427b4c604b3464f8761b5f5610bf48b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "30f8344c2ab34b14a828dd5dc299319b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "b968ae8260b248e98fb3327273c14660",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "3279db9a348a4bc9a1b72fb2a54cb8a8",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "177311c4b4784caa8d966a84eb2b6e32",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "147ca9dba234457b958db4d29287152b",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "17817e9a32f943e7aa4c65dcac85e1ff",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "16379ac2e83648a4b0383e44004d5f07",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "6558a1acb84c4c41a66122255c078a3c",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "a809e3b4d67e45a8964cb201bb6625f5",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "972ec7796a16447f94371ffbdcfbf36d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "Output()"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "
\n"
      ],
      "text/plain": []
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Next we create a results dictionary and scan our network edges to accumulate all\n",
    "# the free energy results and their uncertainty\n",
    "results_dir = Path('results')\n",
    "results_dir.mkdir(parents=True, exist_ok=True)\n",
    "results = dict()\n",
    "for tf_sk in asc.get_network_transformations(an_sk):\n",
    "    transformation = asc.get_transformation(tf_sk)\n",
    "    result = asc.get_transformation_results(tf_sk)\n",
    "    if result is None:\n",
    "        continue\n",
    "    runtype = _scan_components(transformation.stateA)\n",
    "    mapping = transformation.mapping[0]\n",
    "    nameA = mapping.componentA.name\n",
    "    nameB = mapping.componentB.name\n",
    "\n",
    "    # store in accumulator\n",
    "    if f\"{nameA}_{nameB}\" in results.keys():\n",
    "        results[f\"{nameA}_{nameB}\"][runtype] = result\n",
    "    else:\n",
    "        results[f\"{nameA}_{nameB}\"] = {runtype: result, 'molA': nameA, 'molB': nameB}\n",
    "\n",
    "    # output individual results to a separate `.dat` file for future use\n",
    "    filename = results_dir / f\"{nameA}_{nameB}.{runtype}.results.dat\"\n",
    "    output = f\"{result.get_estimate()},{result.get_uncertainty()}\"\n",
    "\n",
    "    with open(filename, 'w') as f:\n",
    "        f.write(output)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7a185273-3bea-4ee0-b69b-64a859bff35c",
   "metadata": {},
   "source": [
    "### Writing out a `cinnabar` input CSV file\n",
    "\n",
    "Since this is a known benchmark system, we have experimental values for each of our ligands. We can combine them with our results to create a `cinnabar` input CSV file."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "id": "e61661ee",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Here we create a dictionary of experimental values from an input protein-ligand benchmark ligands.yml\n",
    "\n",
    "# First load the yaml data\n",
    "import yaml\n",
    "\n",
    "with open('ligands.yml') as stream:\n",
    "    exp_data = yaml.safe_load(stream)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "id": "8d693308",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define a method for converting between Ki to estimated DG\n",
    "from openff.units import unit\n",
    "import math\n",
    "\n",
    "def ki_to_dg(\n",
    "    ki: unit.Quantity, uncertainty: unit.Quantity,\n",
    "    temperature: unit.Quantity = 298.15 * unit.kelvin\n",
    ") -> tuple[unit.Quantity, unit.Quantity]:\n",
    "    \"\"\"\n",
    "    Convenience method to convert a Ki w/ a given uncertainty to an\n",
    "    experimental estimate of the binding free energy.\n",
    "    \n",
    "    Parameters\n",
    "    ----------\n",
    "    ki : unit.Quantity\n",
    "        Experimental Ki value (e.g. 5 * unit.nanomolar)\n",
    "    uncertainty : unit.Quantity\n",
    "        Experimental error. Note: returns 0 if =< 0 * unit.nanomolar.\n",
    "    temperature : unit.Quantity\n",
    "        Experimental temperature. Default: 298.15 * unit.kelvin.\n",
    "        \n",
    "    Returns\n",
    "    -------\n",
    "    DG : unit.Quantity\n",
    "        Gibbs binding free energy.\n",
    "    dDG : unit.Quantity\n",
    "        Error in binding free energy.\n",
    "    \"\"\"\n",
    "    if ki > 1e-15 * unit.nanomolar:\n",
    "        DG = (unit.molar_gas_constant * temperature.to(unit.kelvin)\n",
    "              * math.log(ki / unit.molar)).to(unit.kilocalorie_per_mole)\n",
    "    else:\n",
    "        raise ValueError(\"negative Ki values are not supported\")\n",
    "    if uncertainty > 0 * unit.molar:\n",
    "        dDG = (unit.molar_gas_constant * temperature.to(unit.kelvin)\n",
    "               * uncertainty / ki).to(unit.kilocalorie_per_mole)\n",
    "    else:\n",
    "        dDG = 0 * unit.kilocalorie_per_mole\n",
    "        \n",
    "    return DG, dDG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 112,
   "id": "bbc447a8",
   "metadata": {},
   "outputs": [],
   "source": [
    "from openff.units import unit\n",
    "\n",
    "exp_values = {}\n",
    "for lig in exp_data:\n",
    "    exp_units = unit(exp_data[lig]['measurement']['unit'])\n",
    "    exp_values[lig] = {}\n",
    "    DG, dDG = ki_to_dg(exp_data[lig]['measurement']['value'] * exp_units,\n",
    "                       exp_data[lig]['measurement']['error'] * exp_units)\n",
    "    exp_values[lig]['value'] = DG\n",
    "    exp_values[lig]['error'] = dDG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "id": "03439752",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "# write out the cinnabar input file\n",
    "with open('cinnabar_input.csv', 'w') as f:\n",
    "    f.write(\"# Experimental block\\n\")\n",
    "    f.write(\"# Ligand, expt_DDG, expt_dDDG\\n\")\n",
    "    for entry in exp_values:\n",
    "        f.write(f\"{entry},{exp_values[entry]['value'].m:.2f},{exp_values[entry]['error'].m:.2f}\\n\")\n",
    "    f.write('\\n')\n",
    "    \n",
    "    f.write('# Calculated block\\n')\n",
    "    f.write('# Ligand1,Ligand2,calc_DDG,calc_dDDG(MBAR),calc_dDDG(additional)\\n')\n",
    "    for entry in results:\n",
    "        estimate = (results[entry]['complex'].get_estimate()\n",
    "                    - results[entry]['solvent'].get_estimate())\n",
    "        err = np.sqrt(results[entry]['complex'].get_uncertainty()**2\n",
    "                      + results[entry]['solvent'].get_uncertainty()**2)\n",
    "        molA = results[entry]['molA']\n",
    "        molB = results[entry]['molB']\n",
    "        f.write(f\"{molA},{molB},{estimate.m:.2f},0,{err.m:.2f}\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f8e32ef8-a959-42e3-a94e-6d171bcf07ff",
   "metadata": {},
   "source": [
    "### Plotting out results using `cinnabar` components\n",
    "\n",
    "**Note: the `cinnabar` API will change in its next release.**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "id": "60413e9e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import cinnabar\n",
    "from cinnabar import plotting as cinnabar_plotting\n",
    "from cinnabar import FEMap, femap\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "afc23071-b546-4d46-97d9-1d36efaa7c8f",
   "metadata": {},
   "source": [
    "#### Generating a Cinnabar FEMap and plotting out the network"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5b583a8-d545-4c66-ae1b-fc76b1bacbe1",
   "metadata": {},
   "source": [
    "First let's load the data into cinnabar and draw out the network of free energy results:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 118,
   "id": "56de38d7-fbde-4610-a1ff-428eaaa70648",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA/sAAARECAYAAAAqQwEUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1zVZf/H8dcBxIkhmAou3DY09wB3qThwpeYWR+7UtHIrjpxpqaWZA9yj3AMsBzjA0jRzVK5AQdziQJFxzu8PfnFHLvYBfD8fDx53fM/1va7P4S7lfa7xNZhMJhMiIiIiIiIikmlYmLsAEREREREREUlZCvsiIiIiIiIimYzCvoiIiIiIiEgmo7AvIiIiIiIiksko7IuIiIiIiIhkMgr7IiIiIiIiIpmMwr6IiIiIiIhIJqOwLyIiIiIiIpLJKOyLiIiIiIiIZDIK+yIiIiIiIiKZjMK+iIiIiIiISCajsC8iIiIiIiKSySjsi4iIiIiIiGQyCvsiIiIiIiIimYzCvoiIiIiIiEgmo7AvIiIiIiIiksko7IuIiIiIiIhkMgr7IiIiIiIiIpmMwr6IiIiIiIhIJqOwLyIiIiIiIpLJKOyLiIiIiIiIZDIK+yIiIiIiIiKZjMK+iIiIiIiISCajsC8iIiIiIiKSySjsi4iIiIiIiGQyCvsiIiIiIiIimYzCvoiISCIEBgZiMBgwGAysW7fuqdc9PDwwGAzcunUrxcb8p8+MatOmTXTs2JGSJUuSPXt2nJyc6Ny5M+fPn39m+/DwcMaPH0/p0qXJmjUr9vb21K9f/7ntRURE5GlW5i5AREQkoxozZgzvv/8+WbJkMXcp6dqMGTMoUKAAY8aMoXjx4ly5coWpU6dSqVIljhw5wltvvRXX9uHDh9SvX5+rV68ycuRIypcvz7179/D39+fRo0dmfBciIiIZi8K+iIhIEjRp0gRvb2++/fZbPvroI3OXk65t376dfPnyxbvWoEEDnJyc+PLLL1myZEnc9bFjx/LHH3/w+++/U7x48bjrLVq0SLN6RUREMgMt4xcREUmCBg0a0LhxYyZPnsyDBw9e2n7Pnj28++675M6dmxw5cuDi4sLevXufardz504qVKhA1qxZKVasGF988cUz+wsLC6NXr17Y2dmRK1cumjVrxqVLlzAYDHh4eMRre/78eTp16kS+fPnImjUrb7zxBt988028NkajkSlTplCmTBmyZ8+Ora0t5cuXZ+7cuQn/oTzHf4M+gKOjI4UKFeLKlStx1x49esSSJUto165dvKAvIiIiiaewLyIikkQzZszg1q1bzJo164XtVq1aRaNGjcidOzfLly9nw4YN2NnZ0bhx43iBf+/evbRs2RIbGxvWrVvHrFmz2LBhA56envH6MxqNuLm5sWbNGkaMGMHmzZupXr06rq6uT4199uxZqlatyunTp5k9ezY7duygWbNmDB48mIkTJ8a1mzlzJh4eHnTs2JGdO3eyfv16evXqRVhYWFwbk8lEdHR0gr5e5tKlSwQFBcVbwv/rr78SHh5OqVKl6N+/P3ny5MHa2poqVaqwc+fOl/YpIiIi/2ISERGRBPv7779NgGnWrFkmk8lk6ty5sylnzpym0NBQk8lkMk2YMMEEmG7evGkymUym8PBwk52dncnNzS1ePzExMaZ33nnHVK1atbhr1atXNzk6OpoeP34cd+3+/fsmOzs707//yt65c6cJMC1cuDBen9OmTTMBpgkTJsRda9y4salQoUKme/fuxWs7aNAgU7Zs2Ux37twxmUwmU/PmzU0VKlR44Xvfv3+/CUjQ199///3cfqKiokz16tUz5c6d23T58uW462vXrjUBpty5c5tcXFxM27ZtM+3YscNUv359k8FgMPn4+LywPhEREfkfzeyLiIgkw5QpU4iKioo3S/5v/v7+3Llzh+7du8eb+TYajbi6unL06FHCw8MJDw/n6NGjtGnThmzZssXdb2Njg5ubW7w+/fz8AGjfvn286x07doz3fUREBHv37qV169bkyJEj3vhNmzYlIiKCI0eOAFCtWjVOnjzJgAED2L17N/fv33/qvVSuXJmjR48m6MvR0fGZPw+TyUSvXr04ePAgK1asoHDhwnGvGY1GAKytrfH29sbNzY1mzZqxY8cOHBwcmDx58jP7FBERkafpgD4REZFkcHJyYsCAAXz99dcMGzbsqdevX78OQNu2bZ/bx507dzAYDBiNRgoUKPDU6/+9dvv2baysrLCzs4t3PX/+/E+1i46OZv78+cyfP/+ZY//ziMBRo0aRM2dOVq1axbfffoulpSV16tRhxowZVKlSBYBcuXJRoUKF576Pf7OyevpXDJPJRO/evVm1ahXLly+nZcuW8V63t7cHwNnZGRsbm7jrOXLkoG7dumzZ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fREREREREZFMRmFfREREREREJJNR2BcRERERERHJZBT2RURERERERDIZhX0RERERERGRTEZhX0RERERERCSTUdgXERERERERyWQU9kVEREREREQyGYV9ERERERERkUxGYV9EREREREQkk1HYFxEREREREclkFPZFREREREREMhmFfREREREREZFMRmFfREREREREJJNR2BcRERERERHJZBT2RURERERERDIZhX0RERERERGRTEZhX0RERERERCSTUdgXERERERERyWQU9kVEREREREQyGYV9ERERERERkUxGYV9EREREREQkk1HYFxEREREREclkFPZFREREREREMhmFfREREREREZFMRmFfREREREREJJNR2BcRERERERHJZBT2RURERERERDIZhX0RERERERGRTEZhX0RERERERCSTUdgXERERERERyWQU9kVEREREREQyGYV9ERERERERkUxGYV9EREREREQkk1HYFxEREREREclkFPZFREREREREMhmFfREREREREZFMRmFfREREREREJJNR2BcRERERERHJZBT2RURERERERDIZhX0RERERERGRTEZhX0RERERERCSTUdgXERERERERyWQU9kVEREREREQyGYV9ERERERERkUxGYV9EREREREQkk1HYFxEREREREclkFPZFREREREREMhmFfREREREREZFMRmFfREREREREJJNR2BcRERERERHJZBT2RURERERERDIZhX0RERERERGRTEZhX0RERERERCSTUdgXERERERERyWQU9kVEREREREQyGYV9ERERERERkUxGYV9EREREREQkk1HYFxEREREREclkFPZFREREREREMhmFfREREREREZFMRmFfREREREREJJNR2BcRERERERHJZBT2RURERERERDIZhX0RERERERGRTEZhX0RERERERCSTUdgXERERERERyWQU9kVEREREREQyGYV9ERERERERkUxGYV9EREREREQkk1HYFxEREREREclkFPZFREREREREMhmFfREREREREZFMRmFfREREREREJJNR2BcRERERERHJZKzMXYCIiIjIU2KMcDcCImPA2hLyZANLzVGIiIgklMK+iIiIpA/hkXAkGH4NheD7EG3832tWFlAoN1R2gBqFIKe1+eoUERHJAAwmk8lk7iJERETkFRZjhN0Xwfs8GE3w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qZKknTt36v/+7/8Mp4M/8M9WA/xXQkKCunTpopo1a+qLL75QcHCw6UhG7Ny5U++++66ee+65Ev+ourPz+h07djQdBQAA+Lmrr75aS5cu1ebNm3XfffdpzZo1atGihbp3766UlBTT8eDjbB6Px2M6BGBCUlKSOnbsqKSkJMXExKhGjRqmIxlz//3369tvv9Uff/yhMmXKmI5TIA899JA2bdqkH3/80XQUAAAASdKSJUt06623ymazSZLcbreWLFmi7t27G04GX8bKPvzSmTNndNtttyk+Pl7Lly/366K/detWzZ07V2PGjCnxRV9iXh8AAHifhIQESdkl3+12KzAwUF9//bXhVPB1lH34HbfbrQcffFAxMTH68ssv1ahRI9ORjBo5cqTq1q2rAQMGmI5SYHv37tWuXbuY1wcAAF5j9uzZGjRokM7dUJ2ZmamlS5caTAV/QNmH33n66af1n//8R3PnztWNN95oOo5R69at05IlSzRx4kSVKlXKdJwCc7lcksS8PgAA8Bp169ZVgwYNJEmBgYE5r//xxx+Kj4+/8Juy3NLR09L+k9n/meUujqjwMczsw6+88sorevrpp/XWW2/pscceMx3HKI/HI4fDoeTkZG3evNknnkIwcOBAfffdd/rpp59MRwEAAMjh8XgUGxurd955R/Pnz9eZM2ckSRMmTNDo0aOzLzqVLsXGS5sOSPHJUuY5BT/QLkWFSS2qS22ipLJBBj4FSpqS/2/3wBWaN2+enn76aQ0fPtzvi74kLV++XGvWrNHzzz/vE0VfkizLYl4fAAB4HZvNprZt22rmzJk6ePCgXn31VVWoUEGnT/931f6rHdKwldJnv0p7knIXfSn793uSsr8+bGX29az24zJY2Ydf+Oabb9S1a1f17dtXM2fOzDkJ1V+53W61aNFCoaGhWr16tU/8ecTHx6tmzZpasGCB+vTpYzoOAADA5SWmStM2Zm/Xz6vIctKjLaWI0oWfCz7BN5bzgEv48ccfddttt+mmm27S+++/7xPFtqA+/fRT/fDDD5oyZYrP/Hkwrw8AAK7U2cWfPXv2SJL69eun6OjoIvt+NptN48aNy/1iYqr00jrpYEr+bnowJfv9ian5zvXZZ5+pb9++uuqqq1S6dGlFR0frvvvu044dO8679syZM3rppZd07bXXqmzZsqpataq6du2q9evX5/v7o2ixsg+ftmfPHrVr106RkZGyLEuhoaGmIxmXkZGhRo0a6eqrr/apU2AffvhhrV+/Xj///LPpKAAAwMvNnDlT/fv31+7duxUdHa2dO3cqOTlZzZo1K5LvFxsbq6ioKEVFRWW/kOWWpqzNLuzuAtQxu02qFioNv1EKyPs6buvWrVWtWjX17t1bdevW1b59+zR58mTt27dPsbGxaty4cc61Dz74oD7++GMNHz5cN910kxITEzV16lT9+OOPWrdunVq1apX/z4EiEXj5S4CS6dixY+rSpYtCQkK0dOlSiv5/ffjhh/rjjz+0YMEC01EKlWVZ6ty5s+kYAACgBKpXr16R3r9Nmza5X1ixM39b9//M7cm+z4qdUrf6eX774sWLVaVKlVyv3XTTTYqOjtZrr72m999/X1L2qv7cuXN17733atKkSTnXtm/fXpGRkfr4448p+16IbfzwSampqbr11lt17NgxrVixQlWrVjUdySukpqZq/Pjx6tu3r66//nrTcQrN/v37tWPHDg7nAwAA+XKhbfxJSUkaMGCAIiIiFBoaqu7du2vXrl0X3pJ/GbnecypdM1+dJtv0Hvo2/kf93fqXKn7QV2Hv36kHv3lFpzLSdPD0cd31f1MVPuNuVZ/1gJ5eP0MZWZm57nkmK0MTvp+nhvMGKeTWxqpYsaI6deqUp231fy76khQZGamoqCjt27cv5zW73S673a7y5cvnujYsLEx2u10hISFX/oeBYsPKPnxOVlaW7r33Xv3www9atWqV6tfP+085fdVbb72lw4cPa8KECaajFCrm9QEAQGFyu93q2bOnvv/+e40bN07NmzdXTEyMunTpUvCbx8ZL/925P9D6l26v207zOz+rLUd3asR3s5Xpduu3pHjdXredHm7URSvjf9ALWxYosmyE/nn9bZKkTHeWui4ZqzUHf9FTTXrppqjrlNkmUrGpe7R37161a9cu3/F27dqluLg49e7dO+e1UqVK6dFHH9WMGTN0880352zjHzFihMqXL6+///3vBfkTQRGh7MOneDwePfHEE1q8eLEWLVrEdqJzJCUlacqUKRo4cKCuuuoq03EKlWVZatiwITs4AABAoVi+fLnWrl2r6dOna9CgQZKkzp07KygoSMOHDy/YzTcdyCn7PaJb6eV2A7LvX7OZYg5t17w/XHq13UANub63JOnmqKZasW+zPv7dyin7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mjJlih588EHTcXzC+PHjFRoaqn/+85+moxizbt06ZWVlMa8PAABwAU6nU9u2bdPhw4dNR4EXouyjwBYvXqxHHnlEjz32mJ577jnTcXzC77//rg8//FAjR45UWFiY6TjGuFwuVa1aVVdffbXpKAAAAF7n7O7H1atXG04Cb0TZR4HExsbq7rvvVu/evfXGG28wV11IRo8ercjISD3yyCOmoxjFvD4AAMDF1ahRQ1dddRVz+7ggyj7y7bffflOPHj3UokULzZkzRwEBAaYj+YTNmzfr008/1dixYxUSEmI6jjEpKSn6/vvv2cIPAABwCU6nk7l9XBBlH/ly4MABdenSRVWrVtWXX36p0qVLm47kM0aMGKFrrrlGf/vb30xHMWr9+vXKzMzkcD4AAIBLcDgc+vnnn3XkyBHTUeBlKPvIs+TkZHXr1k3p6elatmyZKlSoYDqSz7AsSytWrNCkSZMUGBhoOo5RLpdLVapUUYMGDUxHAQAA8FrM7eNiKPvIk/T0dPXp00e7du3S8uXLVatWLdORfIbH49Hw4cPVokUL9enTx3Qc4yzLksPhYF4fAADgEmrWrKm6deuylR/n8e+lQ+SJ2+3WgAEDtHr1ai1fvlxNmjQxHcmnLF68WLGxsfq///s/vy+4p06d0oYNG/TGG2+YjgIAAOD1nE4nh/ThPKzs44qNGDFCc+bM0ezZs9WpUyfTcXxKVlaWRowYoU6dOunmm282Hce4mJgY5vUBAACukMPh0E8//aRjx46ZjgIvQtnHFXnzzTf1wgsv6LXXXtPdd99tOo7PmTt3rn755RdNnjzZ71f1pewt/JUqVVKjRo1MRwEAAPB6zO3jQij7uKwFCxZo8ODBGjp0qJ566inTcXxOenq6xowZo969e6tNmzam43gFl8slp9PJDz4AAACuQO3atVWnTh3m9pELZR+XtHr1at1///2655579OKLL5qO45PeffddxcXFadKkSaajeIXTp0/ru+++Yws/AABAHjgcDub2kQtlHxf1888/69Zbb1X79u314Ycfym7nb5fCdurUKU2aNEkPPPCAGjdubDqOV4iNjVVGRoacTqfpKAAAACWG0+nU1q1blZiYaDoKvATtDRe0b98+de3aVdHR0fr8888VHBxsOpJPeuONN5SYmKjx48ebjuI1LMtSxYoVmdcHAADIA4fDIY/HozVr1piO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ayRJCQkJ6tKli6KiovT5558rODjYcDr/tmLFCq1evVqTJ0/mhy5XyLIslSlTRjfccIPpKAAAAD7P4XAoIyNDMTExpqOgGNk8Ho/HdAhc2v79+1WjRg0FBgbq3Xff1WuvvaakpCTFxMSoRo0apuP5NbfbrRtuuEFlypTRmjVrGKW4Qt27d1dmZqZWrFhhOgoAAIDPc7vdqlq1qh555BFNmDDBdBwUk0DTAXB5X3/9taTsOeeHHnpIISEh2rRpE0XfC/znP//Rli1btHr1aor+FcrMzNSaNWs0bNgw01EAAAD8gt1uV8eOHZnb9zPsOS4B/u///k+Bgf/7uUxaWppmzJght9ttMBUyMjI0evRodevWTR06dDAdp8T44YcfdPLkSQ7nAwAAKEZOp1PfffedUlNTTUdBMaHsm5Tllo6elvafzP7PrPPLu9vt1vLly5WZmZnr9VdffVXTpk0rrqS4gJkzZ2rHjh16/vnnTUcpUSzLUunSpZnXBwAAKEYOh0Pp6emKjY01HQXFhG38xe1UuhQbL206IMUnS5nnFPxAuxQVJrWoLrWJksoGaevWrUpMTMy5xGazKTAwUHfeead69uxp4ANAklJTUzVu3Djdc889atq0qek4JYplWWrfvr2CgoJMRwEAAPAb1157rSIiImRZljp16mQ6DooBZb+4ZLmlFTulZTskt0e60LGImW5pT5IUlyR9sV3qWl/TP3s758tXX321Hn30UT3wwAOKiIgoruS4gLfffluHDx/WxIkTTUcpUbKysrRmzRo988wzpqMAAAD4FbvdLofDIZfLZToKigllvzgkpkrTNmZv178SHklZHmnJ75oU2kUJ7XZr2Avj1L59ew6B8wInTpzQlClTNGDAAF111VWm45QoP/zwg5KTk5nXBwAAMMDhcOi5555TWlqaQkJCTMdBEWNmv6glpkovrZMOpuTr7ZUzS2tJx2G6sVELir6XePnll3X69GmNHj3adJQSx+VyKSQkRC1btjQdBQAAwO84nU6dOXNG3333nekoKAY+W/Znzpwpm82mPXv2SJL69eun6Ojo4g2R5c5e0T+Znr11X5Jz0TA5F+XhkWNuT/b7p2284AF++fH+++/LZrMpNDT0vK/169dPNpvtvF8NGjQolO9d0h06dEivvfaannzySR59mA+WZaldu3YKDg42HQUAAMDvNGnSRBUqVOARfH7Cb7bxjx49WoMHDy7eb7pi53lb96d1eDTv93F7su+zYqfUrX6BIiUkJOjpp59WZGSkTpw4ccFrSpcurW+//fa81yBNnjxZgYGBeu6550xHKXHOzuv/85//NB0FAADAL9ntdnXs2FGWZWns2LGm46CI+U3Zr1evXvF+w1Pp2Yfx/UmjiFr5v+eyHZKjtlQ2/6eYDxo0SB07dlRERIQWLFhwwWvsdrvatGmT7+/hq/bs2aPp06dr7NixHJCYD1u3blVSUpIcDofpKAAAAH7L4XBoxIgRzO37AZ/dxv9nF9rGn5SUpAEDBigiIkKhoaHq3r27du3aJZvNpnHjxuXp/unp6Zo0aZIaNGig4OBgVa5RXf1XvqYjqblXz/+8jX9P8iHZpvfQS1sW6oUtCxQ95yGVfvd2ORcN0+9JCcrIytSw2JmKnPWgyr97p267pYcOHz6crz+DOXPmyOVyadq0afl6v78bN26cIiIiin+HiI84O6/fqlUr01EAAAD8ltPpVFpamjZs2GA6CoqY35T9P3O73erZs6fmzp2r5557Tp9//rlat26tLl265OtevXr10tSpU3Xvvfdq6dKlmnrzw/p63xY5Fw1XauaZy97j7V+Wat2BbXq7wyN63/mEth+PV8+vJmiA9YaOpJ7QB50G68U2/bVy41oNHDgwzxkPHz6sp556SlOnTlVUVNQlr01NTVW1atUUEBCgqKgoPf7440pMTMzz9/Qlv/zyiz766CONGjXqgmcd4PIsy1KbNm34CTIAAIBB1113ncLDw3kEnx/wm238f7Z8+XKtXbtW06dP16BBgyRJnTt3VlBQkIYPH56ne3366adavny5Fi5cqNtvvz37IL0vM3R9l6pquXCIZm7/Ro9c2+2S9wgPKqsvuo6S3Zb985ejacl6at17alAhSou6/u/U9+3JCXp98RdKTk5WWFjYFWd89NFHdc011+iRRx655HXXX3+9rr/+el177bWSsldjX3vtNX3zzTfauHGj3xbdUaNGqVatWnr44YdNRymR3G63Vq9eza4IAAAAwwICAtShQwdZlsXTpXyc367sn/1J1l133ZXr9b59++b5XkuWLFF4eLh69uypzMxMZR5JUWZ6hppWqqtqZSrI2v/TZe/RrdYNOUVfkhpWqClJ6l479yPKGpbPXpXfu3fvFedbuHChFi9erPfee++yj+8bMmSIhgwZos6dO6tz586aNGmSZs+ere3bt+u999674u/pS7777jt98cUXmjBhgoKC8n9egj/76aefdPz4ceb1AQAAvIDT6VRMTIzOnLn8DmSUXH67sn/s2DEFBgaed9Ba1apV83yvQ4cOKSkp6aJF8GjahU+9P1dESLlcvw+yZ/+liQgOveDraWlpV5QtJSVFjz32mJ544glFRkYqKSlJUvYZA1L2uQWlSpVS2bJlL3qP2267TWXLllVsbOwVfU9f4vF4NHz4cDVu3Fj33nuv6TgllmVZCg4O5uBHAAAAL+BwOJSamqqNGzfqxhtvNB0HRcRvy37FihWVmZmpxMTEXIX/4MGDeb5XpUqVVLFiRS1fvjz7haQ06d/f53y9XClzj607evSoDh06pFdeeUWvvPLKeV+vUKGCevXqpS+++OKS9/F4PLLb/W8jyMqVK7Vq1SotWrRIAQEBpuOUWC6Xi3l9AAAAL9G0aVOFhYXJsizKvg/zv/b2X2e3E3/yySe5Xp8/f36e79WjRw8dO3ZMWVlZuuGGG3RDp3a6IfIa3VClvm6oUl/XVLj0gXh5EnDpbfh/Vq1aNa1ateq8X7fccotCQkK0atUqTZo06ZL3WLBggU6fPu13q7Iej0cjRoxQ27Zt1bNnT9NxSiy32y2Xy8UWfgAAAC9xdm6fQ/p8m9+u7Hfp0kXt27fX0KFDlZycrBYtWigmJkazZ8+WpDytYt9zzz36+OOP1a1bNw0ePFitWrVSqbTfFf9HnFbt36pe0a11W912hRO8Qt52CYSEhMjpdJ73+syZMxUQEJDra3Fxcbr33nt1zz336KqrrpLNZpPL5dLrr7+uxo0b5+spACXZZ599pu+//16rVq267FkHuLhffvlFiYmJF/z7EAAAAGY4nU6NGTNG6enpnEvlo/y27Nvtdi1evFhDhw7V1KlTlZ6ervbt22vOnDlq06aNwsPDr/heAQEB+vLLL/XGG2/oo48+0pQpUxRoC1BUcAU5Iq9Vk4rRua63KZ/F0SYpunz+3nsFwsLCVLVqVb366qs6dOiQsrKyVLt2bT355JMaMWLEJef6fU1mZqZGjhypW265hZJaQJZlKSgoyO92hgAAAHizs3P733//vdq1K6SFSXgVm8fj8ZgO4U3mzp2r++67T+vWrSvY3/Sn0qVhK6Ws3H+8zf7zpOqFVdOCW0bk/Z4BNumFzlKZUvnPhSvywQcfaMCAAdq0aZOaN29uOk6J1qdPHx05ckSrV682HQUAAAD/lZmZqYiICA0bNkwjRuSjm8Dr+e3KviTNmzdPCQkJatKkiex2u2JjY/XSSy+pY8eOBf/pVtkgqWt9acnvkqTfkxK05sAv+unYHt1f35m/e3atT9EvBmlpaRo7dqzuvPNOin4Bud1urV69WoMGDTIdBQAAAOcIDAzMmdun7Psmvy775cqV0/z58zVp0iSdOnVK1atXV79+/XIdWJeZmXnJe9jt9ovP999ST9p8QDqYoimb/6PFcRv04DU36dFru+ctqN0mVQvNvt853G633G73Jd8aGOjXf4nzZfr06Tpw4IAmTpxoOkqJt23bNh09epRRCAAAAC/kcDg0YcIEZWRkqFQpFhV9Ddv4L2HPnj2qU6fOJa8ZO3asxo0bd/ELElOll9ZJJ9Mldz7+qO02KSxYerqdFJH7cL5x48Zp/Pjxl3z77t27FR0dnffv66eSk5NVr1499e7dW++9957pOCXe22+/rSFDhigpKUllypQxHQcAAADn2LBhg1q3bq2YmBjOV/JBLPteQmRkpDZu3HjZay4porT0THtp2kZp/8m8h6gWKj3a8ryiL0kPP/ywevToUbB8yOXVV1/VyZMnNXbsWNNRfIJlWWrVqhVFHwAAwAs1b95coaGhsiyLsu+DWNkvLlluacVOadmO7BX+S/2p25S9ot+1fvbW/YArfwwg8u/IkSOqW7eu/vGPf+jll182HafE83g8qlq1qh5++OFcozEAAADwHl27dpXH49Hy5ctNR0EhY2W/uATYpW71JUdtKTZe2nRAik+WMs+ZuQ+0S1FhUovqUtuaHMZXzKZMmSKbzaZhw4aZjuITfv31Vx05ckQOh8N0FAAAAFyEw+HQ888/z9y+D6LsF7eyQdJf6mb/cnuyZ/rTs6SggOyt+nab6YR+ae/evXr77bc1cuRIVapUyXQcn+ByuRQYGMhzWwEAALyY0+nU8OHDtXnzZrVu3dp0HBQi9oebZLdJlcpIkeWy/5Oib8z48eNVvnx5DRkyxHQUn2FZllq2bKmyZcuajgIAAICLaNGihcqWLSuXy2U6CgoZZR9+b/v27Zo5c6ZGjhypcuXKmY7jEzwejyzL4pF7AAAAXq5UqVJq3769LMsyHQWFjLIPvzdq1ChFRUVp0KBBpqP4jN9++02HDx9mXh8AAKAEcDqdWrt2rTIzM01HQSGi7MOvff/991q4cKHGjx+v4OBg03F8hmVZCggIUPv27U1HAQAAwGU4HA6dPHlSW7ZsMR0FhYiyD782YsQINWzYUA888IDpKD7F5XKpZcuWCg0NNR0FAAAAl3HDDTeoTJkyzO37GMo+/Na3336rr7/+Ws8//7wCAgJMx/EZZ+f12cIPAABQMgQFBaldu3bM7fsYyj78ksfj0fDhw9WqVSv17t3bdByfsmPHDh08eJDD+QAAAEoQp9OpNWvWKCsry3QUFBLKPvzSokWLtGHDBk2ePFk2G488LEzM6wMAAJQ8DodDycnJ+uGHH0xHQSGh7MPvZGVlaeTIkbr55pv1l7/8xXQcn2NZllq0aMFjDAEAAEqQli1bqnTp0mzl9yGUffidOXPmaNu2bZo8ebLpKD7H4/HI5XIxrw8AAFDCBAcHq23bthzS50Mo+/ArZ86c0dixY3X77berZcuWpuP4nD/++EP79+9nXh8AAKAEcjqdWr16NXP7PoKyD7/yzjvvaN++fZo0aZLpKD7J5XLJbrfrxhtvNB0FAAAAeeR0OnXixAlt3brVdBQUAso+/EZKSoomTZqkv/3tb2rYsKHpOD7Jsiw1b95cYWFhpqMAAAAgj1q1aqWQkBDm9n0EZR9+4/XXX9eJEyc0btw401F80tl5fbbwAwAAlEzM7fsWyj78wrFjx/TSSy/p0UcfVa1atUzH8Um7du1SfHw8h/MBAACUYA6HQ6tXr5bb7TYdBQVE2YdfmDp1qtxut0aMGGE6is9iXh8AAKDkczqdOn78OHP7PoCyD58XHx+vt956S//85z9VuXJl03F8lmVZatq0qcLDw01HAQAAQD61bt1awcHBbOX3AZR9+LwJEyaobNmyGjp0qOkoPsvj8ciyLOb1AQAASriQkBC1adOGQ/p8AGUfPu3333/XBx98oBEjRnBCfBHas2eP9u3bx7w+AACAD3A6nczt+wDKPnza6NGjVb16dT366KOmo/g0y7Jks9nUoUMH01EAAABQQA6HQ4mJifr5559NR0EBUPbhszZv3qxPP/1U48aNU0hIiOk4Ps3lcqlp06aqUKGC6SgAAAAooDZt2igoKIi5/RKOsg+fNXLkSF1zzTX629/+ZjqKz7Msiy38AAAAPqJ06dJq3bo1c/slHGUfPsnlcmn58uWaOHGiAgMDTcfxaXv27FFcXByH8wEAAPgQ5vZLPso+fI7H49Hw4cPVokUL9enTx3Qcn+dyuZjXBwAA8DEOh0NHjx7Vtm3bTEdBPrHkCZ+zZMkSxcTEaMWKFbLb+XlWUbMsS9ddd50iIiJMRwEAAEAhadu2rUqVKiXLsnTttdeajoN8oAnBp2RlZWnEiBHq1KmTOnfubDqOX3C5XMzrAwAA+JgyZcqoVatWHNJXgrGyD58yb948/fzzz4qJiZHNZjMdx+ft3btXu3fvZl4fAADABzmdTr377rvyeDz8u3UJxMo+fEZ6errGjBmjXr16qU2bNqbj+IWzP+llXh8AAMD3OJ1OHTlyRL/++qvpKMgHVvbhM9577z3t2bNHixcvNh3Fb1iWpSZNmqhSpUqmowAAAKCQtW3bVoGBgbIsS40aNTIdB3nEyj58wqlTpzRx4kQ98MADaty4sek4fsPlcrGFHwAAwEeVLVuWuf0SjLIPn/Cvf/1LiYmJGj9+vOkofmPfvn3auXMnh/MBAAD4MIfDIcuy5PF4TEdBHlH2UeIlJibqhRde0KBBgxQdHW06jt84+xPejh07Gk4CAACAouJ0OnX48GH99ttvpqMgjyj7KPFefPFFZWZmauTIkaaj+BWXy6XGjRurcuXKpqMAAACgiLRr104BAQGyLMt0FOQRZR8l2v79+/Wvf/1LTz31lKpWrWo6jl+xLIt5fQAAAB8XGhqqli1bUvZLIMo+SrSJEyeqdOnSeuaZZ0xH8SsJCQn6448/mNcHAADwAw6HQy6Xi7n9EoayjxJr586dev/99zVs2DCVL1/edBy/cnZen7IPAADg+5xOpw4ePKjff//ddBTkAWUfJdaYMWNUpUoVPf7446aj+B2Xy6VGjRqpSpUqpqMAAACgiLVv314BAQE8gq+EoeyjRPrxxx81d+5cjR07VqVLlzYdx+9YlsWqPgAAgJ8oV66cWrRowdx+CUPZR4k0cuRIXXXVVerfv7/pKH7nwIED+v333zmcDwAAwI84nU7m9ksYyj5KnLVr12rp0qWaOHGiSpUqZTqO3zm7fatjx46GkwAAAKC4OBwO7d+/X3/88YfpKLhClH2UKB6PR8OHD1fTpk111113mY7jlyzLUoMGDVStWjXTUQAAAFBMbrzxRtntdub2SxDKPkqUZcuWae3atZo8ebLsdv72NcHlcjGvDwAA4GfCwsLUvHlz5vZLENoSSgy3260RI0aoQ4cO6tKli+k4fungwYPavn078/oAAAB+yOl0yrIs5vZLCMo+SoxPPvlEP/74o6ZMmSKbzWY6jl9avXq1JLGyDwAA4IccDocSEhK0a9cu01FwBSj7KBEyMjI0evRo9ejRQ+3btzcdx29ZlqWrr75a1atXNx0FAAAAxezs3D5b+UsGyj5KhA8++EC7du3S888/bzqKX3O5XGzhBwAA8FPh4eFq1qwZh/SVEJR9eL3Tp09r/Pjxuvfee3XdddeZjuO3Dh8+rG3btrGFHwAAwI85HA7m9ksIyj683ltvvaUjR45o/PjxpqP4tbM/waXsAwAA+C+n06l9+/Zpz549pqPgMij78GpJSUmaOnWqHn74YdWrV890HL/mcrl01VVXqUaNGqajAAAAwJAOHTrIZrMxt18CUPbh1V566SWlpaVp1KhRpqP4PcuymNcHAADwc+Hh4WratClz+yUAZR9e6+DBg3r99dc1ePBgTn837MiRI/rll1/Ywg8AAICcuX14N8o+vNakSZMUFBSkZ5991nQUv7d69WpJzOsDAAAge24/Li6OuX0vR9mHV9q9e7feffddPffcc6pQoYLpOH7P5XKpXr16qlmzpukoAAAAMOzs3D5b+b0bZR9eaezYsapYsaKefPJJ01Gg7Hl9VvUBAAAgSREREbruuuvYyu/lKPvwOj/99JPmzJmjMWPGqEyZMqbj+L1jx47pp59+4nA+AAAA5HA6nazseznKPrzOqFGjVKdOHQ0YMMB0FIh5fQAAAJzP4XBo9+7d2rt3r+kouAjKPrxKTEyMvvzyS02YMEFBQUGm40DZW/jr1KmjWrVqmY4CAAAAL9GxY0dJYnXfi1H24TU8Ho+GDx+u6667Tn379jUdB//lcrlY1QcAAEAuFStWVJMmTZjb92KUfXiN//u//5PL5dLzzz8vu52/Nb1BYmKitm7dyrw+AAAAzsPcvnejUcEruN1ujRgxQu3atVP37t1Nx8F/rVmzRh6Ph5V9AAAAnMfhcGjnzp2Kj483HQUXQNmHV1iwYIE2b96sqVOnymazmY6D/7IsS7Vr11Z0dLTpKAAAAPAyzO17N8o+jMvMzNTo0aPVtWtXdejQwXQcnMPlcrGFHwAAABdUuXJlNW7cmLl9L0XZh3EzZ87U77//rueff950FJzj+PHj+uGHH9jCDwAAgItyOp2UfS9F2YdRqampGjdunO655x41a9bMdByc4+y8Piv7AAAAuBin06k//vhDCQkJpqPgTyj7MGratGk6ePCgJkyYYDoK/sTlcqlmzZrM6wMAAOCimNv3XpR9GHPixAlNmTJFAwcOVP369U3HwZ9YliWn08mBiQAAALioKlWqqFGjRpR9L0TZhzGvvPKKTp06pdGjR5uOgj9JSkpiXh8AAABXxOFwMLfvhSj7MOLw4cN69dVX9cQTT6hGjRqm4+BP1q5dK7fbzbw+AAAALsvpdOr333/XgQMHTEfBOSj7MGLy5MkKDAzUsGHDTEfBBbhcLkVFRalu3bqmowAAAMDLMbfvnSj7KHZxcXGaPn26nnnmGUVERJiOgwuwLEsOh4N5fQAAAFxWtWrV1KBBA8q+l6Hso9iNGzdO4eHhGjx4sOkouIDk5GRt3ryZLfwAAAC4Ysztex/KPorVtm3bNHv2bI0ePVqhoaGm4+ACzs7rczgfAAAArpTT6dT27dt18OBB01HwX5R9FKtRo0apVq1aevjhh01HwUVYlqXIyEhdddVVpqMAAACghDi7ULR69WrDSXAWZR/FZsOGDfr88881fvx4BQUFmY6Di3C5XMzrAwAAIE+qV6+uq6++mq38XoSyj2IzfPhwNW7cWPfdd5/pKLiIkydPatOmTczrAwAAIM+cTieH9HkRyj6KxcqVK/Xtt9/q+eefV0BAgOk4uIh169YpKyuLeX0AAADkmcPh0LZt23T4wCHp6Glp/8ns/8xym47ml2wej8djOgR8m8fjUatWrRQYGKj169ezPdyLDRs2TLNmzdL+/fv56wQAAIArdypdJ7/+VX98skbXV6ore9Y5NTPQLkWFSS2qS22ipLKM9BaHQNMB4Ps+++wzff/991q1ahUF0su5XC45nU7+OgEAAODKZLmlFTulZTtUzu1R0wp1ZMv603pyplvakyTFJUlfbJe61pduqScFsNG8KLGyjyKVmZmpJk2aqFatWlqxYoXpOLiElJQUhYeH66233tKgQYNMxwEAAIC3S0yVpm3M3q6fV5HlpEdbShGlCz8XJDGzjyL20Ucfafv27Zo8ebLpKLiMs/P6HM4HAACAy0pMlV5aJx1Myd/7D6Zkvz8xtXBzIQdlH0UmLS1NY8eO1Z133qkWLVqYjoPLcLlcqlq1qq655hrTUQAAAHAJM2fOlM1m0549eyRJ/fr1U3R0dJF9P5vNpnHjxv3vhSx39or+yXTJnc+N4m5P9vunbcz3AX6fffaZ+vbtq6uuukqlS5dWdHS07rvvPu3YsSPXdXv27JHNZrvory5duuTvM3g5ZvZRZP79739r//79mjhxoukouAKWZcnhcDCvDwAAUMKMHj1agwcPLrL7x8TEKCoq6n8vrNiZv637f+b2ZN9nxU6pW/08v/2FF15QtWrVNHLkSNWtW1f79u3T5MmT1bx5c8XGxqpx48aSpOrVqysmJua893/xxRd64YUXdNtttxX4o3gjZvZRJE6ePKm6deuqV69eev/9903HwWWcOnVK4eHheuONN/Too4+ajgMAAIBLmDlzpvr376/du3cX6Yr+BZ1Kl4atlP58CF9BBNikqTfn+ZT+w4cPq0qVKrle279/v6Kjo/Xggw9etod06tRJGzZs0IEDBxQWFpbn2N6ObfwoEq+++qpOnjypsWPHmo6CK7B+/XplZmYyrw8AAFACXWgbf1JSkgYMGKCIiAiFhoaqe/fu2rVr1/lb8q9ArvfExmvmtq9lm95D38b/qL9b/1LFD/oq7P079eA3r+hURpoOnj6uu/5vqsJn3K3qsx7Q0+tnKCMrM9c9z2RlaML389Rw3iCFTO+titWrqlOnTlq/fv0V5/pz0ZekyMhIRUVFad++fZd8786dO+VyuXTXXXf5ZNGX2MaPInD06FG98soreuyxx1SzZk3TcXAFXC6XKleurIYNG5qOAgAAgAJyu93q2bOnvv/+e40bN07NmzdXTExM4cymbzog/XdRf6D1L91et53md35WW47u1IjvZivT7dZvSfG6vW47Pdyoi1bG/6AXtixQZNkI/fP67O3yme4sdV0yVmsO/qKnmvTSTTWuU2blEMXWSNbevXvVrl27fMfbtWuX4uLi1Lt370te98EHH8jj8WjgwIH5/l7ejrKPQjdlyhRJ0vDhww0nwZViXh8AAMB3LF++XGvXrtX06dNzHqncuXNnBQUFFezf0bPcUnxyzm97RLfSy+0GZN+/ZjPFHNqueX+49Gq7gRpyfW9J0s1RTbVi32Z9/LuVU/bn7XBp1f6tes/xhAY2uiX7ZoF29ZzYRbLn/99HMzMzNWDAAIWGhmrIkCEX/xhZWZo1a5YaNGig9u3b5/v7eTu28aNQ7du3T2+//baefvppVapUyXQcXIHTp09rw4YNbOEHAADwES6XS5J011135Xq9b9++Bbvx8TQp838n5/eo3TLXlxuGZ+/q7X6B1+NSjuT8ftneTQoJCNJDDTv/76JMd4Eew+fxeDRgwACtWbNGs2fPvuQO4+XLlyshIUEDBgzI9/crCVjZR6EaP368wsLCLvmTNHiXmJgYZWRkyOFwmI4CAACAQnDs2DEFBgYqIiIi1+tVq1Yt2I3Ts3L9NiK4XK7fBwUE/vf10PNeT8tMz/n9kbQTiiwbIbvtT2vPf7r/lTq7HX/OnDmaNWuWevXqdcnrZ8yYoVKlSunBBx/M1/crKVjZR6HZvn27PvzwQ40cOVLlypW7/BvgFSzLUqVKldSoUSPTUQAAAFAIKlasqMzMTCUmJuZ6/eDBgwW7cVBAwd7/X5VDymv/qUS5Pe7cX8jH/c8W/Q8//FDvv/++7r///ktef/jwYS1ZskS33nrrBQ/48yWUfRSa0aNHKyoqKmcuCCWDy+VSx44dZbfzjwMAAABfcHbH5ieffJLr9fnz5xfsxhVCpMCC/ztj11otlJaVrpnbV/7vxUC7FFE6T/fxeDz6+9//rg8//FDvvPOO+vfvf9n3zJ49WxkZGT6/hV9iGz8KyaZNm7RgwQJ98MEHCg4ONh0HVyg1NVXfffedXn75ZdNRAAAAUEi6dOmi9u3ba+jQoUpOTlaLFi0UExOj2bNnS1L+F3kC7FJUmPRzwfL1re/Qh9tXatDqafotKUGdalwnd5Uy+m58rBo2bKh77rnniu7z5JNPasaMGXrooYfUpEkTxcbG5nwtODhYzZo1O+89M2bMUM2aNXXLLbcU7EOUAJR9FIoRI0aoYcOGeuCBB0xHQR7ExsYqPT2deX0AAAAfYrfbtXjxYg0dOlRTp05Venq62rdvrzlz5qhNmzYKDw/P8z1zntrUorq0omD5Au0B+qr7OE3Z/B/N+8Ol17cuUrnQcrr+hmZ5ejzg4sWLJWU/Ru+DDz7I9bXatWtrz549uV5bv369tm/frjFjxvjFrlabx+PxmA6Bkm3VqlW66aabtHDhQt1+++2m4yAPxo4dq7feektHjhzxi3/gAQAA+LO5c+fqvvvu07p16674WfYnTpxQeHi43nzzTT3++OPSqXRp2EopqxBrZIBNeqGzVKZU4d0TrOyjYDwej4YPH66WLVvqtttuMx0HeeRyueRwOCj6AAAAPmbevHlKSEhQkyZNZLfbFRsbq5deekkdO3a84qIfGxubM/fftm3b7BfLBkld60tLfi+8sF3rU/SLAGUfBfLll1/qu+++08qVK/+3tQclQlpammJjY/XCCy+YjgIAAIBCVq5cOc2fP1+TJk3SqVOnVL16dfXr10+TJk3KuSYzM/OS97j33nuVlZWlV155RS1atPjfF26pJ20+IB1MkdwFWOG326Rqodn3O4fb7Zbb7b7Im7IFBlJlL4dt/Mi3rKwsXXfddapevbpWrlx5+TfAq1iWpU6dOumHH37Q9ddfbzoOAAAAitGePXtUp06dS14zduxYjRs37sJfTEyVXlonnUzPX+G326SwYOnpduedwt+vXz/NmjXrkm+nxl4ePw5Bvn388cfatm2bPvzwQ9NRkA8ul0sVKlRQkyZNTEcBAABAMYuMjNTGjRsve81FRZSWnmkvTdso7T+Z9wDVQqVHW17wcXvjxo3LPh8ABcLKPvLlzJkzatCggZo3b66FCxeajoN86NSpk8qXL68vvvjCdBQAAACUVFluacVOadmO7BX+S7VLm7JX9LvWz966H8C5UUWJlX3ky7vvvqu9e/fqq6++Mh0F+XB2Xn/y5MmmowAAAKAkC7BL3epLjtpSbLy06YAUnyxlnjNzH2iXosKyH9vXtiaH8RUTVvaRZykpKapXr566devGFv4SavXq1XI4HNq8ebOaNWtmOg4AAAB8iduTPdOfniUFBWRv1bdzmHdxY2UfefbGG28oKSnp4od1wOu5XC6Fh4fruuuuMx0FAAAAvsZukyqVMZ3C7zEkgTw5duyYXnzxRT3yyCOqXbu26TjIJ8uy1KFDBwUEBJiOAgAAAKAIUPaRJy+88IKysrI0YsQI01GQT2fOnFFMTIycTqfpKAAAAACKCGUfVywhIUFvvvmmhg4dqipVqpiOg3zauHGjUlNT5XA4TEcBAAAAUEQo+7hiEyZMUNmyZTV06FDTUVAAlmUpLCxMTZs2NR0FAAAAQBHhgD5ckR07dmjGjBl68cUXFRYWZjoOCsDlcjGvDwAAAPg4VvZxRUaPHq3q1avr0UcfNR0FBZCenq5169Yxrw8AAAD4OFb2cVlbtmzRJ598ovfee08hISGm46AAvv/+e+b1AQAAAD/Ayj4ua+TIkbr66qvVr18/01FQQJZlqVy5cmrWrJnpKAAAAACKECv7uKTVq1dr2bJl+vTTTxUYyN8uJd3ZeX3+WgIAAAC+jZV9XJTH49Hw4cPVvHlz9enTx3QcFFBGRobWrl3LFn4AAADAD7C8h4taunSp1q9frxUrVshu5+dCJd3333+v06dPczgfAAAA4AdocLggt9utESNGyOl0qnPnzqbjoBC4XC6FhoaqefPmpqMAAAAAKGKs7OOC5s2bp59++kkxMTGy2Wym46AQWJalG2+8kXl9AAAAwA+wso/zpKena8yYMerVq5fatGljOg4KQUZGhtatW8e8PgAAAOAnWOLDed5//33t3r1bixYtMh0FhWTz5s1KSUlhXh8AAADwE6zsI5dTp05p4sSJuv/++3XttdeajoNC4nK5VLZsWbVo0cJ0FAAAAADFgLKPXN58800dO3ZM48ePNx0FhciyLLVv316lSpUyHQUAAABAMaDsI8fx48f1wgsv6B//+Ifq1KljOg4KSWZmptauXcsWfgAAAMCPUPaR48UXX1R6erpGjRplOgoK0ZYtW3Ty5EkO5wMAAAD8CGUfkqQDBw7ojTfe0JAhQ1S1alXTcVCILMtSmTJldMMNN5iOAgAAAKCYUPYhSZo4caJCQkL09NNPm46CQuZyudSuXTsFBQWZjgIAAACgmFD2oZ07d+q9997TsGHDFB4ebjoOClFWVpbWrFnDvD4AAADgZyj70NixY1WlShU9/vjjpqOgkP3www9KTk5mXh8AAADwM4GmA8CsrVu3au7cuZo+fbrKlCljOg4KmWVZKl26tFq2bGk6CgAAAIBiZPN4PB7TIWBOz549tX37dm3bto1nsPugW2+9VadPn9bKlStNRwEAAABQjNjG78fWrVunJUuWaOLEiRR9H5SVlaXVq1ezhR8AAADwQ6zs+ymPxyOHw6GTJ09q06ZNstv5uY+v2bx5s1q0aKHVq1erQ4cOpuMAAAAAKEbM7Pup5cuXa82aNfrqq68o+j7K5XIpJCRErVq1Mh0FAAAAQDFjZd8Pud1uNW/eXGFhYXK5XLLZbKYjoQj06tVLJ0+e1Lfffms6CgAAAIBixsq+H/r000/1448/au3atRR9H+V2u7VmzRoNHjzYdBQAAAAABrCy72cyMjLUqFEjNWjQQIsXLzYdB0Xkhx9+ULNmzWRZFgf0AQAAAH6IlX0/88EHH2jnzp1auHCh6SgoQi6XS8HBwWrdurXpKAAAAAAMYGXfj6Smpuqqq66S0+nUxx9/bDoOitBtt92m48ePy7Is01EAAAAAGMAx7H7krbfe0uHDhzVhwgTTUVCE3G63Vq9eLafTaToKAAAAAEMo+34iKSlJU6ZM0d///nfVq1fPdBwUoZ9//lmJiYnM6gMAAAB+jLLvJ15++WWlpaVp9OjRpqOgiFmWpaCgILVp08Z0FAAAAACGUPb9wKFDh/Taa69p8ODBql69uuk4KGIul0utW7dW6dKlTUcBAAAAYAhl3w9MmjRJQUFBevbZZ01HQRFzu91yuVzM6wMAAAB+jrLv43bv3q133nlHzz77rCpUqGA6DorYtm3bdOzYMco+AAAA4Oco+z5u3Lhxqlixop588knTUVAMLMtSqVKlmNcHAAAA/Fyg6QAoOj///LM++ugjvfXWWypbtqzpOCgGZ+f1y5QpYzoKAAAAAINY2fdho0aNUnR0tAYOHGg6CoqBx+ORZVk8cg8AAAAAK/u+KjY2VosWLdKcOXMUFBRkOg6KwbZt23T06FHm9QEAAACwsu+LPB6Phg8friZNmqhv376m46CYuFwuBQYGqm3btqajAAAAADCMlX0f9PXXX8uyLC1evFh2Oz/P8ReWZalVq1aczwAAAABANo/H4zEdAoXH7XarVatWCg4O1tq1a2Wz2UxHQjHweDyqVq2aBgwYoMmTJ5uOAwAAAMAwVvZ9zMKFC7Vp0ya5XC6Kvh/Zvn27Dh8+zLw+AAAAAEnM7PuUzMxMjR49Wl27dlXHjh1Nx0ExOjuv365dO9NRAAAAAHgBVvZ9yKxZs/Tbb79p3rx5pqOgmFmWpRtuuEGhoaGmowAAAADwAqzs+4i0tDSNGzdOd999t5o1a2Y6DoqRx+ORy+ViCz8AAACAHJR9HzFt2jQdOHBAEydONB0Fxez333/XwYMH5XA4TEcBAAAA4CUo+z4gOTlZkydP1oABA1S/fn3TcVDMLMtSQECA2rdvbzoKAAAAAC9B2fcBr7zyik6dOqUxY8aYjgIDXC6XWrRooXLlypmOAgAAAMBLUPZLuMOHD+vVV1/VE088oRo1apiOg2Lm8XhkWRbz+gAAAAByoeyXcJMnT5bdbtdzzz1nOgoM+OOPP3TgwAHKPgAAAIBcKPslWFxcnKZPn65nnnlGFStWNB0HBliWJbvdzrw+AAAAgFwo+yXY+PHjFR4erqeeesp0FBhydl4/LCzMdBQAAAAAXoSyX0Jt27ZNs2bN0qhRoxQaGmo6Dgw4O6/PI/cAAAAA/Bllv4QaPXq0atasqYcffth0FBiyc+dOJSQkMK8PAAAA4DyBpgMg7zZu3KjPPvtMs2bNUnBwsOk4MMTlcslut+vGG280HQUAAACAl7F5PB6P6RDIm5tvvlkHDx7Ujz/+qICAANNxYMgDDzygX3/9Vd9//73pKAAAAAC8DCv7Jcw333yjb775Rp9//jlF3495PB65XC7deeedpqMAAAAA8EKs7JcgHo9HrVu3lt1uV0xMjGw2m+lIMGTXrl2qV6+evvzyS/Xs2dN0HAAAAABehpX9EuTzzz/Xxo0b9e2331L0/ZzL5ZLNZlOHDh1MRwEAAADghVjZLyGysrLUpEkT1axZUytWrDAdB4b97W9/008//aTNmzebjgIAAADAC7GyX0J89NFH+vXXX/XRRx+ZjgIv4HK5dPvtt5uOAQAAAMBL2U0HwOWdOXNGY8eO1R133KEWLVqYjgPD9uzZo7i4ODkcDtNRAAAAAHgpyr6X+vHHH5WQkCBJ+ve//62EhARNmjTJcCp4A8uymNcHAAAAcEls4/dSf/3rX3X8+HH94x//0Lx589SvXz9dc801pmPBC7hcLl133XWKiIgwHQUAAACAl2Jl30udPHlSGRkZevvtt3Xs2DGFh4crJSXFdCx4Acuy5HQ6TccAAAAA4MUo+14qMzNTknT2YQmvvfaaatWqpe3bt5uMBcPi4uK0Z88eyj4AAACAS6LseyGPx6OMjIxcr9lsNpUrV07lypUzlArewOVySRLz+gAAAAAuibLvhbKyss57rW/fvvrpp59Uo0YNA4ngLc7O61esWNF0FAAAAABejLLvhdLT03P+e9myZTVv3jx99NFHCgsLM5gK3sCyLB65BwAAAOCyOI3fpCy3dDxNSs+SggKkCiFSgF02m02SFB0dLcuyVLt2bcNB4Q327dunXbt2Ma8PAAAA4LIo+8XtVLoUGy9tOiDFJ0uZ7v99LdAuRYWpdIvq2hqzSQ1aNFGpUqXMZYVXOTuv37FjR8NJAAAAAHg7yn5xyXJLK3ZKy3ZIbo/kucA1mW5pT5IUl6QmdpuUWE66pZ4UwLQFsrfwX3vttapUqZLpKAAAAAC8HGW/OCSmStM2SvtPXtn1HklZHmnJ79LmA9KjLaWI0kUaEd7P5XLplltuMR0DAAAAQAngs0vGM2fOlM1m0549eyRJ/fr1U3R0dPEHSUyVXlonHUyRJDkXDZNz0bArf//BlOz3J6YWWqT3339fNptNoaGh533N4/HovffeU4sWLRQWFqaKFSvK4XBo6dKlhfb9kXcJCQn6448/mNcHAAAAcEV8tuz/2ejRo/X5558X7zfNcmev6J9Mz966L2lah0c1rcOjV34Ptyf7/dM2Zt+vgBISEvT0008rMjLygl8fO3asHn74YbVq1UoLFy7UzJkzFRwcrB49euizzz4r8PdH/jCvDwAAACAvbB6P50LT4yXezJkz1b9/f+3evdvMir4kfbUjeyt+YelxtdStfoFu0bNnT9lsNkVERGjBggVKSUnJ9fWoqCjVqVNHa9asyXktLS1N1apVk8Ph0KJFiwr0/ZE/Dz/8sNatW6dffvnFdBQAAAAAJYDfrOxfaBt/UlKSBgwYoIiICIWGhqp79+7atWuXbDabxo0bl6f7p6ena9KkSWrQoIGCg4NVuVJl9R/6qI6knsh13Z+38e9JPiTb9B56actCvbBlgaLnPKTS794u56Jh+j0pQRlZmRoWO1ORsx5U+dua6raevXT48OF8/RnMmTNHLpdL06ZNu+g1pUqVUvny5XO9FhISkvMLZrhcLrbwAwAAALhiflP2/8ztdqtnz56aO3eunnvuOX3++edq3bq1unTpkq979erVS1OnTtW9996rpUuXamq/ofp63xY5Fw1XauaZy97j7V+Wat2BbXq7wyN63/mEth+PV8+vJmiA9YaOpJ7QB50G68W2/bXym280cODAPGc8fPiwnnrqKU2dOlVRUVEXvW7w4MFavny5ZsyYoePHj+vAgQP65z//qRMnTujJJ5/M8/dFwe3fv1+///67HA6H6SgAAAAASgi/PY1/+fLlWrt2raZPn65BgwZJkjp37qygoCANHz48T/f69NNPtXz5ci1cuFC333579oubS+v6LiFquXCIZm7/Ro9c2+2S9wgPKqsvuo6S3Zb985ejacl6at17alAhSou6js65bnvWEb2++FMlJycrLCzsijM++uijuuaaa/TII49c8rqnnnpKpUuX1mOPPZbzQ4WIiAgtXrxY7du3v+Lvh8Jzdl6fsg8AAADgSvntyv7ZAnXXXXfler1v3755vteSJUsUHh6unj17KjMzU5ln0pW597iaVqqramUqyNr/02Xv0a3WDTlFX5IaVqgpSepeu2Wu6xqWqipJ2rt37xXnW7hwoRYvXqz33ntPNpvtktd++OGHGjx4sB5//HGtXLlSX331lf7617+qV69eWrFixRV/TxQel8ulBg0aqGrVqqajAAAAACgh/HZl/9ixYwoMDFRERESu1/NTqA4dOqSkpCQFBQVd8OtH005c8PVzRYSUy/X7IHv2X5qI4NyPxwtSgKTsQ/OuREpKih577DE98cQTioyMVFJSkqTsMwak7HMLSpUqpbJly+r48eM5K/ovv/xyzj26du0qp9OpQYMGaffu3Vf0fVF4LMtSp06dTMcAAAAAUIL4bdmvWLGiMjMzlZiYmKvwHzx4MM/3qlSpkipWrKjly5dnv3DklDRjS87Xy5UqXeC8+XX06FEdOnRIr7zyil555ZXzvl6hQgX16tVLX3zxhX777TelpqaqZcuW5113ww03yOVyKSUlRaGhoed9HUXj4MGD+u233zR+/HjTUQAAAACUIH5b9h0Oh1588UV98sknuebY58+fn+d79ejRQ/Pnz1dWVpZat24tHT0tLU65/BuLQbVq1bRq1arzXp86dapcLpeWLVumSpUqSZIiIyMlSbGxsfrb3/6Wc63H41FsbKwqVKigsmXLFk9wSGJeHwAAAED++G3Z79Kli9q3b6+hQ4cqOTlZLVq0UExMjGbPni1Jstuv/DiDe+65Rx9//LG6deumwYMHq1WLG1TqwFbFnziiVfu3qld0a91Wt13hBA+49Mz9n4WEhFzwkW0zZ85UQEBArq/VqlVLt99+u959910FBwerW7duOnPmjGbNmqV169Zp4sSJl535R+FyuVy65pprVK1aNdNRAAAAAJQgflv27Xa7Fi9erKFDh2rq1KlKT09X+/btNWfOHLVp00bh4eFXfK+AgAB9+eWXeuONN/TRRx9pypQpCnTbFFWmohyR16pJxehc19tUgMJcoWhHAj7++GO99dZb+uijj/TBBx+oVKlSuvrqqzVnzhzde++9Rfq9cT7LsljVBwAAAJBnNo/H4zEdwpvMnTtX9913n9atW6d27QqwGv/NLumzX6U//ek2+8+TqhdWTQtuGZH3e9ok3d5Q+kvd/OdCiXHo0CFVq1ZNc+fOzddTIgAAAAD4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vaJb67a67QonfIW8LTyFhIRccAx15syZCggIyPW11NRU3XLLLdqyZYtef/11ZWZmKjY2NufrlStXVr169fKbHEWEsg8UwC+//KJjx45xOB8AAEAJkJWVpcTEREnSokWLdPr0acXExOjQoUNq1KiR9u7dq1OnTuVcv2TJEtlsNkVERKhLly5atGiR7r//fv3973/PKfOBgZeuVF9++aXeeOMNffTRR5oyZYoCbQGKCq4gR+S1alIxOte1NuVzxd8mKbp8/t57BQ4dOqSNGzdKkgYPHnze1//2t79p5syZRfb9kT82j8fjMR0CKKneeustDR06VMePH1eZMmVMxwEAAPBraWlpOdvpz91af/ZXfHy8MjMzc66vUKFCrpX42rVrq1atWjn/vXLlyjmn1M+dO1f33Xef1q1bp3btCrAafypdGrZSyspdw5r950nVC6umBbeMyPs9A2zSC52lMqXynws+h5V9oAAsy1KrVq0o+gAAAMUgKSnporPycXFxOnToUM61NptN1atXzynubdq0Oa/QlytX7oLfZ968eXK5XGrSpInsdrtiY2P10ksvqWPHjgUr+pJUNkjqWl9a8rsk6fekBK058It+OrZH99d35u+eXetT9HEeyj6QTx6PRy6XS4MGDTIdBQAAoMRzu906dOjQeWX+3EKfnJycc31QUJBq1qyp2rVrq3HjxurWrVuuFfqoqKiLPvLucsqVK6f58+dr0qRJOnXqlKpXr65+/fpp0qRJOdecu0PgQux2+8WfP39LPWnzAXkOpmjK5v9ocdwGPXjNTXr02u55C2q3SdVCs+93Drfbfd4hgX92ufEDlHxs4wfy6ZdfftG1116rr7/+WjfffLPpOAAAAF4tPT1d8fHxFyzzcXFx2rdvX84z3iUpLCzsvG315/6qWrXqxct0EduzZ4/q1KlzyWvGjh2rcePGXfTrx3bEK2vqalUKDpM9P7P6dpsUFiw93U6KyH0437hx4zR+/PhLvn337t2Kjo7O+/dFiUHZB/Lp7bff1pAhQ3T8+HGVLVvWdBwAAACjTp48ecE5+bO/Dhw4oHOrR9WqVS86K1+7dm2Fh4eb+zCXkZ6erq1bt17ymsjISEVGRl7wa6dOndJNN92kjEPJinnwTQUfPZP3EJHlpEdbnlf0JWn//v3av3//Jd9+3XXX5XvnA0oGyj6QT3fddZcSEhK0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AAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF0PYBwAAAADAxRD2AQAAAABwMYR9AAAAAABcDGEfAAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF0PYBwAAAADAxRD2AQAAAABwMYR9AAAAAABcDGEfAAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF0PYBwAAAADAxRD2AQAAAABwMYR9AAAAAABcDGEfAAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF0PYBwAAAADAxRD2AQAAAABwMYR9AAAAAABcDGEfAAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF0PYBwAAAADAxRD2AQAAAABwMYR9AAAAAABcDGEfAAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF0PYBwAAAADAxRD2AQAAAABwMYR9AAAAAABcDGEfAAAAAAAXQ9gHAAAAAMDFEPYBAAAAAHAxhH0AAAAAAFwMYR8AAAAAABdD2AcAAAAAwMUQ9gEAAAAAcDGEfQAAAAAAXAxhHwAAAAAAF/P/ALg0hBL8oUvsAAAAAElFTkSuQmCC",
      "text/plain": [
       "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fe = FEMap.from_csv('cinnabar_input.csv')\n", "fe.generate_absolute_values() # Get MLE generated estimates of the absolute values\n", "fe.draw_graph()" ] }, { "cell_type": "markdown", "id": "3ef71a46-4b8b-4072-8c65-7dbc22747469", "metadata": {}, "source": [ "#### Plotting out the relative free energy results" ] }, { "cell_type": "markdown", "id": "73acc23c-7a5c-4fbb-b313-445ead198882", "metadata": {}, "source": [ "Next we can go ahead and plot out the relative free energy results:" ] }, { "cell_type": "code", "execution_count": 120, "id": "1a747b7f-a06c-4027-9556-433242fb50ce", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# note you can pass the filename argument to write things out to file\n", "cinnabar_plotting.plot_DDGs(fe.to_legacy_graph(), figsize=5, xy_lim=[5, -5])" ] }, { "cell_type": "markdown", "id": "c004a6f7-ed37-4895-9552-fb9f42c0f2b4", "metadata": {}, "source": [ "#### Plotting out the absolute free energy results" ] }, { "cell_type": "markdown", "id": "14de5ffe-c80b-46d3-9356-b72f0ad1e134", "metadata": {}, "source": [ "Finally let's go ahead and plot out the MLE derived absolute free energies:" ] }, { "cell_type": "code", "execution_count": 121, "id": "f9e652a4-3657-43c9-a2ed-7b074a03578e", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# note you can pass the filename argument to write to file\n", "cinnabar_plotting.plot_DGs(fe.to_legacy_graph(), figsize=5, xy_lim=[5, -5])" ] }, { "cell_type": "markdown", "id": "999ee6ed-b2b2-4d79-aca4-de45d06bdaa5", "metadata": {}, "source": [ "We can also shift our free energies by the average experimental value to have DGs on the same scale as experiment:" ] }, { "cell_type": "code", "execution_count": 125, "id": "873fb9e5-5035-4c2d-9d16-620acdc6f94a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/david/micromamba/envs/alchemiscale-client-user-guide-2024.09.26/lib/python3.12/site-packages/cinnabar/femap.py:35: UserWarning: Assuming kcal/mol units on measurements\n", " warnings.warn(\"Assuming kcal/mol units on measurements\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data = femap.read_csv('cinnabar_input.csv')\n", "exp_DG_sum = sum([data['Experimental'][i].DG for i in data['Experimental'].keys()])\n", "shift = exp_DG_sum / len(data['Experimental'].keys())\n", "\n", "cinnabar_plotting.plot_DGs(fe.to_legacy_graph(), figsize=5, shift=shift.m)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.6" } }, "nbformat": 4, "nbformat_minor": 5 }